ファイルへのパスを見つけて、その出力をシェルスクリプトの変数に保存します。具体的には、bashシェルで、
GCC_VERSION="find *-gcc"
それから
echo ${GCC_VERSION}
プリント
find some-gcc
変数GCC_VERSION
を取得して、find
の出力を保持するにはどうすればよいですか? find *-gcc
コマンドの出力を変数GCC_VERSION
に保存する方法は次のとおりです。
echo ${GCC_VERSION}
プリント
some-gcc
まず、find
コマンドが正しくありません。現在のディレクトリで-gcc
で終わるすべてのファイルを検索する場合は、次のようにする必要があります。
$ find . -type f -name "*-gcc"
find
の出力をGCC_VERSION
に保存するには、 process substitution
を使用します。
$ GCC_VERSION=$(find . -type f -name "*-gcc")
-gcc
で終わるファイルが複数ある場合があるため、変数名を二重引用符で囲むことに注意してください。
$ echo "$GCC_VERSION"
./mipsel-linux-gnu-gcc
./aarch64-linux-gnu-gcc
./mips-linux-gnu-gcc
./arm-linux-gnueabihf-gcc
バックティックを使用する必要があります
VARIABLE=`Command`
推奨される新しいスタイルのコマンド置換構文
VARIABLE=$(Command)
両方の形式がサポートされていますが、前者のスクリプトの埋め込みには制限があります。
The Open Group Base Specifications Issue 7、2018 edition :からの引用
コマンド置換の「$()」形式は、逆引用符を使用する場合の一貫性のない動作の問題を解決します。例:
Command Output
echo '\$x' \$x
echo `echo '\$x'` $x
echo $(echo '\$x') \$x
さらに、逆引用符で囲まれた構文には、埋め込みコマンドの内容に歴史的な制限があります。新しい「$()」フォームはあらゆる種類の有効な埋め込みスクリプトを処理できますが、逆引用符付きフォームは逆引用符を含む有効なスクリプトを処理できません。たとえば、そうでなければ有効な埋め込みスクリプトは左側の列では機能しませんが、右側では機能します:
echo ` echo $(
cat <<\eof cat <<\eof
a here-doc with ` a here-doc with )
eof eof
` )
...引用の終わり。