распаковать строку в переменную - PullRequest
5 голосов
/ 08 августа 2010

В Bash я могу использовать следующий код:

[ "$sshcmd" = "" ] && sshcmd="ssh -someopts myhost"

$sshcmd "echo hello world"

В ZSH тот же код не работает, потому что он пытается найти исполняемый файл "ssh -someopts myhost".Как я могу сделать то же самое в ZSH?

Спасибо, Альберт

1 Ответ

2 голосов
/ 08 августа 2010

Чтобы разбить строку в пробелах (в более общем случае, в $IFS), как в других оболочках: $=sshcmd

Но вместо этого вы должны сделать sshcmd массивом, чтобы ваши команды по-прежнему работали, если один из параметров содержит пробел:

sshcmd=(ssh -someopts myopts)
$sshcmd[@] "echo hello world"

Кстати, это относится и к bash и ksh; но там вы также должны защитить подстановку переменных массива от дальнейшего разделения и расширения имени файла:

sshcmd=(ssh -someopts myopts)
"${sshcmd[@]}" "echo hello world"
...