コマンドライン解析~シェルの基礎の基礎~
はじめに
インフラエンジニア初学者のぽれいんと申します。
転職する前はプログラミングスクールにて主にHTML、CSS、Ruby、MySQL等について学びました。
※このブログでは自分が後々、見返すことができるようにまとめることを目的としていますが、もし需要があるようでしたら是非ともご覧ください。
<前回の記事>
<関連記事>
↑↑まだ見ていない方はこちらから↑↑
コマンドライン
$変数名という文字列をコマンドラインで指定すると、シェルは置き換えを行う。
シェルは変数だけでなくコマンドラインを分析し、様々な文字列に置き換えてからコマンドを実行している。
リテラル文字とメタ文字
リテラル文字…文字そのものを表現する際に用いる
メタ文字…シェルにとって意味をもった文字で、実際にコマンドが実行される前に、別の文字列に置き換えられるもの。
~ ...カレントユーザのホームディレクトリに置換
$変数名 ...変数に格納されている値に置換
` コマンド ` ...コマンドを実行したときに出力される文字列に置換
* ...0文字以上の文字列(ただし、ドットで始まるファイル名の「.」は除く)
? ...任意の1文字(ただし、ドットで始まるファイル名の「.」は除く)
(スペース) ...要素の区切り
; ...コマンドの区切り
\ ...メタ文字の打ち消し
バッククォート(`)
コマンドを実行したときに出力される文字列に置換の例
echo 今日の日付は`date +%Y%m%d`です
→今日の日付は20211015です
メタ文字のクォート
シェル上でコマンドを実行する場合、文字列の中に置き換えるべき文字があるかどうかを探し、あれば、それを展開してから実行する。そのため、メタ文字として認識される文字をリテラル文字(文字通りの文字)として認識させるためにはそのための処理(以下のいずれかの処理)をしてあげる必要がある。
・エスケープ文字(¥)を前置する *1
・シングルクォートで囲む *2
・ダブルクォートで囲む(但し、$ ` ¥ はメタ文字としての意味を失わない) *3
例
例えば、echoコマンドで(メタ文字としての意味を持つ)スペースを含む文字列を出力
*1 echo I¥ love¥ you
*2 echo 'I love you'
*3 echo "I love you"
→I love you
状況に応じて使い分ける必要がある。
以上!!!!!!!