シェル スクリプトの最も便利な機能の 1 つは、通常、Linux の世界ではバッククォート (`) と呼ばれる低位の逆引用符です。注意してください。これは、文字列に使用する通常の一重引用符文字ではありません。シェル スクリプト以外ではあまり使用されないため、キーボードのどこにあるかさえわからない場合があります。これは多くのシェル スクリプトの重要なコンポーネントであるため、よく知っておく必要があります。
ヒント :米国のキーボードでは、通常、チルダ記号 ( ∼ ) と同じキーにあります。バッククォートを使用すると、シェル コマンドの出力を変数に割り当てることができます。これは大したことではないように思えますが、スクリプト プログラミングの主要な構成要素です。コマンド ライン コマンド全体をバッククォート文字で囲む必要があります:
# testing=`date`
シェルはバッククォート内でコマンドを実行し、出力を変数 testing に割り当てます。以下は、通常のシェル コマンドからの出力を使用して変数を作成する例です:
$ cat myscript.sh #!/bin/bash # using the backtick character testing=`date` echo "The date and time are: $testing" $
変数 testing は date コマンドからの出力を受け取り、それを表示するために echo ステートメントで使用されます。シェル スクリプトを実行すると、次の出力が生成されます。
$ chmod u+x myscript.sh $ ./myscript.sh The date and time are: Mon Jul 21 09:13:42 IST 2014 $
この例ではそれほど興味深いことではありません (コマンドを echo ステートメントに入れるだけでも簡単にできます) が、コマンド出力を変数に取り込めば、それを使って何でもできます。
以下は、バッククォートを使用して現在の日付を取得し、それを使用してスクリプトで一意のファイル名を作成する方法の一般的な例です:
#!/bin/bash # copy the /usr/bin directory listing to a log file today=`date +%y%m%d` ls /usr/bin -al > /tmp/log.$today
today 変数には、フォーマットされた date コマンドの出力が割り当てられます。これは、ログ ファイル名の日付情報を抽出するために使用される一般的な手法です。 +%y%m%d 形式は、date コマンドに日付を 2 桁の年、月、日として表示するように指示します。
$ date +%y%m%d 140721 $
スクリプトは値を変数に割り当て、ファイル名の一部として使用します。ファイル自体には、ディレクトリ リストのリダイレクトされた出力が含まれています。スクリプトを実行すると、/tmp ディレクトリに新しいファイルが表示されます:
$ ls -l /tmp/log.140721 -rw-rw-r-- 1 geek geek 116755 Jul 21 09:21 /tmp/log.140721
ログ ファイルは、ファイル名の一部として $today 変数の値を使用してディレクトリに表示されます。ログ ファイルの内容は、/usr/bin ディレクトリからのディレクトリ リストです。スクリプトが翌日実行される場合、ログ ファイル名は log.140722 になり、新しい日に新しいファイルが作成されます。