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