以下内容在我的 shell (zsh) 中有效:
> FOO='ls'
> $FOO
file1 file2
但以下情况则不然:
> FOO='emacs -nw'
> $FOO
zsh: command not found: emacs -nw
即使emacs -nw
直接调用也可以很好地打开 Emacs。
为什么?
答案1
因为没有名为 的命令emacs -nw
。有一个被调用的命令emacs
,您可以向其传递-nw
选项。
为了存储命令,通常使用功能:
foo() emacs -nw "$@"
foo ...
要存储多个参数,通常使用数组:
foo=(emacs -nw)
$foo ...
要存储包含多个由空格分隔的单词的字符串并将其按空格分割,您可以执行以下操作:
foo='emacs -nw'
${(s: :)foo} ...
您可以依赖 IFS 上执行的分词(IFS 默认包含空格、制表符、换行符和 nul):
foo='emacs -nw'
$=foo ...
答案2
对于未来的读者,应该提到的是,执行此类操作的“标准”方法是eval
评估存储在变量中的参数:
eval "$foo"
还可以通过命令替换来计算表达式:
$(expr "$foo")
echo
ed 变量(或以其他方式打印)也可以工作:
$(echo "$foo")
这些方法至少在zsh
和 中工作得很好bash
。