Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2812

【bash】におけるクォートの扱い

$
0
0

背景

bashを書き始めたばかりの新米エンジニアです。コーディングしていて、
”あれ、ここシングルクォート?ダブル?そもそも囲う必要あるのかな?まぁ動けばなんでもいいか・・・”
という具合にいつも悩んでしまうので、改めて整理することにした。

結論

以下の認識でOK。
詳しくは個別に後で解説する。
コメント 2020-08-17 221526.png

シングルクォート''

文字列をシングルクォートで囲むと、文字列中の各文字すべてが特殊な意味を失い、文字通りの意味として解釈される。

# $HOMEはシェルを実行中のユーザのホームディレクトリが設定されている特別なシェル変数$ echo'$HOME'# シングルクォートで囲む$HOME# そのまま$HOMEと出力される$ echo"$HOME"# ダブルクォートで囲む
/c/Users/guest.name # シェル変数の値に展開される$ echo'*'# シングルクォートで囲む*# そのまま*と出力される$ echo*# 何もクォートしない
bin doc src # カレントディレクリのファイル名に展開される

ダブルクォート""

文字列をダブルクォートで囲むと、シングルクォートとほぼ同様にほとんどの文字がその特殊な意味を失う。
しかし、\$と`の特殊な意味は残るため、パラメータ展開とコマンド置換は行われる。
予期せぬ挙動を防ぐために、"\$変数" や "\$(コマンド置換)" はダブルクォートで囲んだほうが良さそう。

# パラメータ展開$ var='*** hello  world ***'# スペースの連続と*を含む文字列$ echo"$var"# ダブルクォートで囲む*** hello  world ***# 正しく表示される$ echo$var# ダブルクォートで囲まない
bin doc src hello world bin doc src # スペースが区切り文字として解釈され、前後にカレントディレクトリのファイル名が展開される# コマンド置換$ user='$(whoami)'# シングルクォートで囲む$ echo"$user"$(whoami)# 単なる文字列として解釈されている$ user="$(whoami)"# ダブルクォートで囲む$ echo"$user"
guest.name # whoamiコマンドの結果が代入されている

バックスラッシュ\

文字の前にバックスラッシュををつけると、\の直後の1文字が特殊な意味を失い、文字通りの意味として解釈される。

$ echo\$HOME  # $の前にバックスラッシュをつける$HOME# そのまま$HOMEと出力される$ echo$HOME# バックスラッシュをつけないと
/c/Users/guest.name # シェル変数の値に展開される$ echo\*# *の前にバックスラッシュをつける*# そのまま*と出力される$ echo*# バックスラッシュをつけないと
bin doc src  # カレントディレクリのファイル名に展開される

参考文献:山森 丈範 『[改訂第3版]シェルスクリプト基本リファレンス ──#!/bin/shで、ここまでできる』 技術評論社 (2018/11/14)


Viewing all articles
Browse latest Browse all 2812

Trending Articles