在bash脚本中使用空格

时间:2014-07-25 12:24:00

标签: bash

我有一个脚本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 

我该如何处理?

3 个答案:

答案 0 :(得分:3)

您不应仅仅通过调用它来将变量用作命令(就像在$CMD中一样)。而是使用eval来评估存储在变量中的命令。只有这样,才能执行所有shell逻辑的真正评估步骤:

eval "$CMD"

(并使用双引号将命令传递给eval。)

答案 1 :(得分:2)

请不要这样做。

阅读Bash FAQ #50

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

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

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

答案 2 :(得分:0)

正确的方法是使用数组:

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