bashでは、あるコマンドの実行に先立ち、別のコマンドを実行するには、コマンド置換という機能を使う。
コマンド置換は、"`"(バッククォート)で囲むか、"$("と")"で囲むことで可能である。
たとえば、ファイル名に現在日付をもつファイルをtouchコマンドで作成し、それを削除するには以下のようにする。

$ touch test`date '+%Y%m%d'`       <--バッククォート部分が先に実行される。
$ ls -l test*
-rw-r--r-- 1 tomonari None 0 2011-01-17 00:07 test20110117
$ rm -i test$(date '+%Y%m%d')   <--$()部分が先に実行される。
rm: remove regular empty file `test20110117'? y

"`"(バッククォート)と"$()"の違いは、後者がコマンドのネストができることくらい。
バックォートも内部のバックコートを"\"(バックスラッシュ)でエスケープすれば、ひとつだけネストできるが、2つ以上はできない。

$ echo "abc $(echo def $(echo ghi)) jkl"
abc def ghi jkl
$ echo "abc `echo def \`echo ghi\`` jkl"
abc def ghi jkl         <---ひとつだけのネストはOK
$ echo "abc $(echo def $(echo ghi $(echo AAA))) jkl"
abc def ghi AAA jkl       <---ふたつのネストもOK。
$ echo "abc `echo def \`echo ghi \`echo AAA\`\`` jkl"
abc def ghiecho AAA jkl          <---4つ目のechoが表示されているのでNG。


名前:
コメント:


最終更新:2011年01月17日 00:21