構文を使用する場合、echo $($cmd)
基本的には、$cmd
独自の行を配置することと同じです。問題は、コマンドを実行する前に bash がワイルドカードを補間する方法にあります。それを防ぐ方法*
は、スクリプトでそれらを逆参照するときに、char を含む変数を再び引用符で囲むことです。
ただし、コマンド全体をfind . -name "*.sh"
変数に入れ、それを `echo $("$cmd") で引用すると、シェルはその行全体が実行するファイルであると解釈し、ファイルが見つからないというエラーが発生します。 .
したがって、変数に本当に必要なものと、変数から何を引き出すことができるかによって異なります。変数にプログラムが必要な場合、これは機能します。
#!/bin/bash
cmd='/usr/bin/find'
$cmd . -name "*.sh" -maxdepth 1
.sh
これにより、シェルがワイルドカードを補間せずに、現在の作業ディレクトリ内で終わるすべてのファイルが検索されます。
パターンを変数に入れる必要がある場合は、次を使用できます。
#!/bin/bash
pattern="*.sh"
/usr/bin/find . -name "$pattern" -maxdepth 1
しかし、すべてを変数に入れると、期待した結果が得られません。お役に立てれば。bash の第一人者が私が見逃していることを知っているなら、ぜひ聞きたいです。