繁体   English   中英

在bash脚本中使用空格

[英]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

  1. 我正在尝试保存命令,以便以后可以运行而不必每次都重复

如果要将命令放在容器中供以后使用,请使用一个函数。 变量保存数据,函数保存代码。

 pingMe() { ping -q -c1 "$HOSTNAME" } [...] if pingMe; then .. 

正确的方法是使用数组:

CMD=(export FOO="BAR BAR")
"${CMD[@]}"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM