「わからない」を「わかった」に変えるブログ

シェルにおけるシングルクォート、ダブルクォート、バッククォートで囲った場合の挙動の違い

更新日: 公開日: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」をコマンドとして発行し、その処理結果がアウトプットとなります。

もしバッククォートで囲って、その変数値がコマンドでない場合、シェルのエラーになるのでご注意ください。

\ この記事をシェアする /