Это хорошо работает:
#!/usr/bin/env bash
cmd="ls -l"
${cmd}
Но измените его для выполнения под оболочкой Z:
#!/usr/bin/env zsh
cmd="ls -l"
${cmd}
И я добираюсь:
./testing.sh:3: command not found: ls -l
Да ведь и как я заставляю его работать под zsh? Полный сценарий я продолжаю работать, требует zsh.
Та же проблема присутствует и для builtins и для внешних команд; например, замена ls -l
с touch something
выставки то же различие? Что произошло с этим? Спасибо!
У Вас есть две опции:
Используйте массив вместо (рекомендуемой) строки
cmd=(ls -l)
$cmd
Разделите строку на слова
cmd='ls -l'
$=cmd
Источник: Что разделяет слово? Почему это важно в программировании оболочки?