以下は私のシェル(zsh)で動作します。
> FOO='ls'
> $FOO
file1 file2
次の場合はそうではありません。
> FOO='emacs -nw'
> $FOO
zsh: command not found: emacs -nw
直接呼び出しても、emacs -nw
Emacsはうまく開きます。
なぜ?
答え1
というコマンドがないからですemacs -nw
。オプションemacs
を渡すことができる呼び出されたコマンドがあります-nw
。
コマンドを保存するには、以下を使用するのが一般的です。機能:
foo() emacs -nw "$@"
foo ...
複数のパラメータを保存するには、通常配列が使用されます。
foo=(emacs -nw)
$foo ...
スペースで区切られた複数の単語を含む文字列を保存してスペースに分割するには、次のようにします。
foo='emacs -nw'
${(s: :)foo} ...
IFSで実行されるトークン化を使用できます(IFSにはデフォルトでスペース、タブ、改行、およびnulが含まれています)。
foo='emacs -nw'
$=foo ...
答え2
将来の読者のためにこのようなタスクを実行する「標準」方法は、変数に格納されているパラメータを評価することであることに注意する必要がありますeval
。
eval "$foo"
コマンド置換によって式を評価することもできます。
$(expr "$foo")
echo
ed変数(または他の方法で印刷)も機能します。
$(echo "$foo")
これらの方法はzsh
少なくともbash
。