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