シェルにおけるシングルクォート、ダブルクォート、バッククォートで囲った場合の挙動の違い
更新日: 公開日:2013/01/22
Linux等のシェルスクリプトにおいて、変数を各クォートで囲った場合、それぞれ異なる処理となります。
各クォートの処理内容
記号 | 名称 | 動作 |
---|---|---|
‘ | シングルクォート | 囲った中身を文字列として出力 |
“ | ダブルクォート | 囲った変数の中身を文字列として出力 |
` | バッククォート (アンサングラーブ) | 囲った変数の中身をコマンドとして処理し、その結果を出力 |
シングルクォートは Shift + 7、バッククォートは Shift + @ で入力できます。それぞれ似ていますが、よく見ると違いがわかります。既に出来合いのソースコードを読む際は、特に注意が必要ですね。
挙動の違い
処理サンプルプログラム
具体的な動きは以下の通りです。
変数「A」に文字列「ls」を設定した場合の動きを例に挙げます。
[TESTSRV1-root-S/5] ls bin src hello.c hello.o makefile [TESTSRV1-root-S/5] A="ls" [TESTSRV1-root-S/5] echo $A ls [TESTSRV1-root-S/5] echo '$A' $A [TESTSRV1-root-S/5] echo "$A" ls [TESTSRV1-root-S/5] echo `$A` bin src hello.c hello.o makefile [TESTSRV1-root-S/5]
何も囲まなかった場合と、ダブルクォートで囲った場合は、同じ動きとなります。(処理に応じて囲む必要があります。)シングルクォートで囲った場合は「$A」そのものの文字列として取り扱われます。そしてバッククォートで囲った場合は、変数値「ls」をコマンドとして発行し、その処理結果がアウトプットとなります。
もしバッククォートで囲って、その変数値がコマンドでない場合、シェルのエラーになるのでご注意ください。