bash - 如何将参数中的空格传递给变量中的命令
问题描述
我想将要执行的 bash 命令放在一个变量中,然后执行该变量。该命令有参数,其中一些参数可能包含空格。我怎样才能做到这一点?
到目前为止,我尝试过的是这样的:
nbargs(){ echo $#; } # define some function
command='nbargs 1 "2 3"' # I want nbargs to recieve 2 args, not 3
现在,如果直接调用该命令,它会按预期工作。但间接地,通过变量,它没有。
nbargs 1 "2 3" # output: 2
echo $command # output: nbargs 1 "2 3"
$command # output: 3 ???
我该如何解决我的问题,你能解释为什么执行变量不考虑引号?
解决方案
如果你想存储完整的命令行来调用你的函数,那么你应该使用 shell 数组:
cmd=(nbargs 1 "2 3")
并将其称为:
"${cmd[@]}"
这将正确输出:
2
不要使用变量名command
,因为这也是一个 shell 实用程序。
像在字符串变量中一样存储完整的命令很容易出错,尤其是。当你有空格、引号等时。
推荐阅读
- jquery - 如何配置 JQuery Validate 和 InputMask-robinherbots 一起工作
- android - 获取 JSON 中的数组列表
- angular - 排序方法在 ngOnInit 方法中不起作用
- powershell - 这个 0 是从哪里来的?
- java - 在 android studio 中创建 JAR 时,如何在模块中添加外部 jar 库?
- angular - 使用指令扩展 Angular 组件
- android - CollapsingToolbarLayout 内的 ViewPager
- reactjs - Nextjs 公用文件夹
- hadoop - 为 Hadoop Distcp 作业设置 YARN 应用程序名称
- php - 其他模型中的 Laravel 电子邮件验证