ZSH 引号转义和扩展

ZSH 引号转义和扩展

我正在尝试运行 tmux,一次传递多个命令,但无法正确引用字符串。

在命令行中手动输入命令即可成功:

~% /usr/local/bin/tmux start-server\; set-option -g default-command '/usr/bin/true 1 2 3' \; new-session
[exited]

但在实际情况下,我需要动态构建命令,然后无法使其正确扩展。单引号似乎在${=var}扩展过程中被丢弃:

 ~% cmd="/usr/local/bin/tmux start-server; set-option -g default-command '/usr/bin/true 1 2 3' ; new-session"
 ~% ${=cmd}
usage: set-option [-agosquw] [-t target-session|target-window] option [value]

当将命令作为单个字符串传递时,tmux 无法理解该命令,即不包括/usr/local/bin/tmux字符串中的标记,而是使用${cmd}而不是来扩展其余部分${=cmd}

~% /usr/local/bin/tmux 'start-server; set-option -g default-command "/usr/bin/true 1 2 3"; new-session'
unknown command: start-server; set-option -g default-command "/usr/bin/true 1 2 3"; new-session

我的 zsh 版本:

⚠~% ${SHELL} --version
zsh 5.0.2 (x86_64-apple-darwin12.2.1)

答案1

${(z)var}扩展变量,同时保持内部引号完整。

相关内容