コマンドラインの出力をキャプチャする方法は2つありますbash
。
レガシーボーンシェルのバックティック
``
:var=`command`
$()
構文(私が知る限り、これはBash固有であるか、少なくとも元のBourneのような非POSIX古いシェルではサポートされていません)var=$(command)
バックティックと比較して2番目の構文を使用する利点はありますか?それとも2つは完全に100%同等ですか?
$()
エイリアスでの使用とバッククォートに関する注意。あなたが持っている場合はalias foo=$(command)
、あなたの中で.bashrc
、その後command
aliasコマンド自体が中に実行されたときに実行されます.bashrc
解釈。でalias foo=`command`
、command
エイリアスが実行されるたびに実行されます。ただし$
、$()
フォーム(例:)でエスケープすると、解釈alias foo=\$(command)
中ではなく、エイリアスが実行されるたびに実行.bashrc
されます。とにかく、テストでわかる限り、この動作を説明するbashドキュメントには何も見つかりません。
`command`
command
1回だけ実行されます。私はそれをチェックしました:function aaa(){printf date; echo aaa >>〜/ test.txt; エイリアスtest1 = aaa
。エイリアス(test1
)が何回実行されても、関数aaaは1回だけ(ログインごとに)実行されます。.bashrc(Debian 10)を使用しました。
$()
POSIXであり、ksh、bash、ash、dash、zsh、busyboxなどのすべての最新のBourneシェルでサポートされています。(それほどモダンではない/bin/sh
がSolarisですが、Solaris/usr/xpg4/bin/sh
では代わりにモダンを使用することを確認します)。