我有一个脚本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
我该如何处理?
答案 0 :(得分:3)
您不应仅仅通过调用它来将变量用作命令(就像在$CMD
中一样)。而是使用eval
来评估存储在变量中的命令。只有这样,才能执行所有shell逻辑的真正评估步骤:
eval "$CMD"
(并使用双引号将命令传递给eval
。)
答案 1 :(得分:2)
请不要这样做。
- 我正在尝试保存一个命令,以便我可以在以后运行它,而不必每次都重复它
醇>如果要将命令放在容器中供以后使用,请使用 功能。变量保存数据,函数保存代码。
pingMe() { ping -q -c1 "$HOSTNAME" } [...] if pingMe; then ..
答案 2 :(得分:0)
正确的方法是使用数组:
CMD=(export FOO="BAR BAR")
"${CMD[@]}"