在Bash中,我可以使用以下代码:
[ "$sshcmd" = "" ] && sshcmd="ssh -someopts myhost"
$sshcmd "echo hello world"
在ZSH中,相同的代码不起作用,因为它试图找到“ssh -someopts myhost”可执行文件。我怎样才能在ZSH中做同样的事情?
谢谢,艾伯特
答案 0 :(得分:2)
要像其他shell一样在空格处拆分字符串(更常见的是,$IFS
):$=sshcmd
但是你应该使sshcmd
成为一个数组,这样如果其中一个选项包含空格,你的命令仍然有效:
sshcmd=(ssh -someopts myopts)
$sshcmd[@] "echo hello world"
顺便说一下,这也适用于bash和ksh;但是你必须保护数组变量替换以防止进一步的拆分和文件名扩展:
sshcmd=(ssh -someopts myopts)
"${sshcmd[@]}" "echo hello world"