[英]Using spaces in bash scripts
我有一个脚本foo.sh
CMD='export FOO="BAR"'
$CMD
echo $FOO
它按预期工作
>./foo.sh
"BAR"
现在我想将FOO变量更改为BAR BAR
。 所以我得到了脚本
CMD='export FOO="BAR BAR"'
$CMD
echo $FOO
当我运行它时,我期望得到"BAR BAR"
,但是我得到
./foo.sh: line 2: export: `BAR"': not a valid identifier
"BAR
我该如何处理?
您不应仅通过调用变量(如在$CMD
)将其用作命令。 而是使用eval
评估存储在变量中的命令。 只有这样做,才能执行所有外壳程序逻辑的真实评估步骤:
eval "$CMD"
(并使用双引号将命令传递给eval
。)
只是不要那样做。
并阅读Bash常见问题#50
- 我正在尝试保存命令,以便以后可以运行而不必每次都重复
如果要将命令放在容器中供以后使用,请使用一个函数。 变量保存数据,函数保存代码。
pingMe() { ping -q -c1 "$HOSTNAME" } [...] if pingMe; then ..
正确的方法是使用数组:
CMD=(export FOO="BAR BAR")
"${CMD[@]}"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.