【shell】クオーテーションの使い分けについて今一度まとめてみる【Linux】

10月 2, 2023

どもども!真夏なのにコートを探してしまうsaisaiです。


本日より平日学習強化プロジェクトとして、しばらくshellやshellscriptについて基礎から学習し直していこうと思います。


本日はその第一弾としてshellにおけるクオーテーションの使い分けについて今一度学習し、記事にしていきたいと思います。普段なんとなく使っているだけに、ここでしっかり使い分けできるようにしておきたい…!

シングルクオーテーション

' '<-こいつのことです。クオーテーション界最強で囲まれたら最後、全て文字列にされてしまいます。

まず初めに普通にechoコマンドで文字列を出力してみます。

# echo saisai
saisai

次に、変数を定義して出力すると以下のようにできますね。

# export name=saisai
# echo $name
saisai

ではこの変数 $nameをシングルクオートで囲ってみましょう。

# echo '$name'
$name

すると、上記のように変数は変換されず$nameという文字列として出力されます。

このようにとにかく文字列として出力したいんだ!という時はシングルクオーテーションを使用します。

ダブルクオーテーション

" “<-こいつです。こいつも囲むことで文字列として扱うために使用します。


ではシングルクオーテーションと何が違うのか、それは"変数を変換できる"という点にあります。


例えば以下のように使用することができます。

# echo "My name is $name"
My name is saisai

無事変数が変換されています。他にもエスケープ文字である"\(バックスラッシュ)"ですが、シングルクオートの場合は文字列として認識されますがダブルクオートの場合はしっかりエスケープしてくれます。

バッククオーテーション

` `<-こいつです。こいつは少々機能が異なります。


バッククオートは囲んだ部分のコマンドを実行して出力してくれます。例えば、

# echo "Now:date"
Now:date

現在の時刻を表示したくてもそのままではただの文字列になってしまいます。

ここでバッククオーテーションを使用すると

# echo "Now:`date`"
Now:Mon Jul  5 14:07:27 UTC 2021

このようにコマンド結果を表示することができます。

しかし、注意するべきはシングルクオーテーションです。

# echo 'Now:`date`'
Now:`date`

このようにシングルクオーテーションはあらゆるものを全て文字列に変換するので注意しましょう。

まとめ

各クオーテーションの特徴をおさらいすると以下の通りです。

シングルクオーテーション: 全てを文字列とします。
ダブルクオーテーション: 基本的には文字列としますが、" $ “ \ “は文字列とはせず通常通りの処理を行います。
バッククオーテーション: コマンド結果をその位置に出力します。

各クオーテーションを用法を正しく守って快適なshellライフを過ごしましょう。

最後まで読んでいただきありがとうございます!


↓オススメ教材

shellscript

Posted by CY