Вызывающая команда, хранящаяся в переменной в 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 ответ

У вас есть два варианта:

  1. Используйте массив вместо строки (рекомендуется)

    cmd=(ls -l)
    $cmd
    
  2. Разбить строку на слова

    cmd='ls -l'
    $=cmd
    

Источник: Что такое разделение слов? Почему это важно в программировании оболочки?

Другие вопросы по тегам