忍者ブログ

エンジニア初心者の備忘録

エンジニア初心者が躓いたことハマったことを公開します!

Linuxのシェルやコマンドにおけるクォートについて

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

コメント

ただいまコメントを受けつけておりません。

Linuxのシェルやコマンドにおけるクォートについて

当社のCTOから出題されるクイズの整理と書き留めを行いたいと思います。

【CTOからの1日1答】 2016/02/25

[問題] linux

次の 問A から 問D コマンドを実行した結果をそれぞれ1から5の選択肢の中から選べ。

問A COMMAND=whoami;echo `$COMMAND`
問B COMMAND=whoami;echo '$COMMAND'
問C COMMAND=whoami;echo "$COMMAND"
問D COMMAND=whoami;echo $COMMAND

1. $COMMANDと表示される
2.whoamiと表示される
3.ログインしているユーザー名が表示される
4$whoamiと表示される
5.シンタックスエラーになる

[正解]


問A COMMAND=whoami;echo `$COMMAND`

3.ログインしているユーザー名が表示される

問B COMMAND=whoami;echo '$COMMAND'

1. $COMMANDと表示される

問C COMMAND=whoami;echo "$COMMAND"

2.whoamiと表示される

問D COMMAND=whoami;echo $COMMAND

2.whoamiと表示される

です。

`の場合はコマンドが実行される
'の場合は展開されない文字列
"の場合は展開された文字列

というところできちんと区別しておいてください。

この問題の鍵になる部分は、クォートによる挙動の違いです。
クォートとは特定の文字列をリテラルとして使用する特殊記号となります。
なお、リテラルとは、

リテラルとは、プログラムのソースコードにおいて使用される、数値や文字列を直接に記述した定数のことである。変数の対義語であり、変更されないことを前提とした値である。
『IT用語辞典バイナリ > IT用語辞典 > ソフトウェア > プログラミング > コーディング > リテラルとは』

です。

この問題で理解しておくべきは下記の3つのクォートの挙動の違いです。

1.「'」(シングルクォート)
 強いクォート。
 囲った文字列は全て展開されず、文字そのものとして出力。

2.「"」(ダブルクォート)
 弱いクォート。
 囲った変数の中身を文字列として出力。

3.「`」(バッククォート)
 コマンド置換。
 囲った変数の中身をコマンドとして処理し、その結果を出力。


問題およびその解答と上記でまとめた各クォートの挙動が一致していることが分かります。
なお、何も囲まなかった場合、ダブルクォートで囲った場合と同じ動きとなっていることが分かります。

このクォートの挙動の違いから考えると、シェルやコマンドである数値や文字列をリテラルつまり定数として確実に使用するためには、「'」(シングルクォート)で囲むことが基本となるのではないかと思います。


以上です!


【参考サイト】
『シェルにおけるシングルクォート、ダブルクォート、バッククォートで囲った場合の挙動の違い』
『Linuxのシェルやコマンドにおけるバッククォートの使い方』
『クォートとコマンド置換』
『■シェルスクリプトの基礎』



PR

コメント

プロフィール

HN:
プラムザ 太郎
性別:
非公開

P R