ZSH Цитата экранирования и расширения

2

Я пытаюсь запустить 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)

источник

Ответы:

2

${(z)var} расширяет переменную, сохраняя внутренние кавычки нетронутыми.


источник