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

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

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

こちらの記事もいかがですか?

Name :
気力・体力勝負なシステム業界のエンジニアを経て、個人事業主として独立。Web サイト運営、動画制作など活動の場を広げています。目指すところへの道のりは険しいですが、自分が自分らしくあるために、一歩ずつ進んでいきます。

このブログでは、困ってたどり着いた人に、分かりやすく答えを提供できるように心掛けています。更新情報は、Twitter や Facebook ページを参照ください。よろしければフォローお待ちしています。

プロフィール詳細 Twitter @_NJ69_
Facebook ページ nj-clucker.com シェア
このブログが役に立ったら
「いいね!」お願いします
PAGE TOP ↑