シェルスクリプトの基礎 - クォーテーション
概要
シェルスクリプトではクォートによって囲まれた中身の処理がそれぞれ異なる。
ここでは、クォートごとの処理内容について記載する。
クォートの種類
- シングルクォーテーション '文字または文字列'
- 内容を文字列として出力する。
- ダブルクォーテーション "変数名"
- 変数の内容を文字列として出力する。
- バッククォーテーション `コマンド名`
- コマンドとして実行して、結果を出力する。
シングルクォーテーション
囲んだ文字や文字列を出力する場合、シングルクォーテーションを使用する。
シングルクォーテーションで囲った場合、たとえ中に変数名が記述していても、変数の内容を展開することなく変数名がそのまま文字列として処理される。
以下のサンプルコードでは、変数STRINGSにHello World.という文字列を格納して、echoで表示させている。
変数STRINGSをシングルクォーテーションで囲っているため、変数の内容が展開されずに、そのまま$STRINGSが文字列として出力される。
#!/bin/bash
STRINGS='Hello World.'
echo '$STRINGS'
# 出力 $STRINGS
※文字としてシングルクォーテーションを表示する場合
Hello ‘World’という文字列を表示させる場合、'Hello '(Helloを出力) + \'('を出力) + 'World'(Worldを出力) + \'('を出力)というように、
シングルクォーテーションを一度閉じてから、\'でシングルクォーテーションをエスケープする必要がある。
#!/bin/bash
echo 'Hello '\''World'\'
ダブルクォーテーション
ダブルクォーテーションは、囲った文字列に変数名がある場合、変数の内容を展開して表示させたい場合に使用する。
以下のサンプルコードでは、$STRINGSをダブルクォーテーションで囲っているため、変数の内容が展開され、格納されていたHello World.という文字列が表示される。
#!/bin/bash
STRINGS='Hello World.'
echo "$STRINGS"
# 出力 Hello World.
バッククォーテーション
バッククォーテーションは、シェルスクリプトの中でコマンドを実行させる場合に使用する。
以下のサンプルコードでは、dateコマンドで現在(シェルスクリプト実行時)の日時を取得して表示させるシェルスクリプトを実行している。
#!/bin/bash
echo "今の日時は`date`です。"
# 出力 今の日時は2020年 2月 11日 火曜日 10:14:21 JSTです。
※注意
バッククォーテーションで囲まれているコマンドを、さらにシングルクォーテーションで囲むと、
コマンドは実行されずに、`date`という文字列として表示されるので注意すること。
#!/bin/bash
echo '今の日時は`date`です。'
# 出力 今の日時は`date`です。
シングルクォーテーションとダブルクォーテーションの使い分け
通常はシングルクォーテーションを使用して、変数の展開やコマンドの実行結果を表示させたい場合にダブルクォートを使うという形を取るようにするべきである。