ぽれいんのブログ

エンジニアになるために覚えたことを日記に付けます。

コマンドライン解析~シェルの基礎の基礎~

はじめに

インフラエンジニア初学者のぽれいんと申します。

転職する前はプログラミングスクールにて主にHTML、CSSRubyMySQL等について学びました。

※このブログでは自分が後々、見返すことができるようにまとめることを目的としていますが、もし需要があるようでしたら是非ともご覧ください。

<前回の記事>

porain.hatenablog.com

<関連記事>

porain.hatenablog.com

↑↑まだ見ていない方はこちらから↑↑

 

 

 

 

 

コマンドライン

$変数名という文字列をコマンドラインで指定すると、シェルは置き換えを行う。

シェルは変数だけでなくコマンドラインを分析し、様々な文字列に置き換えてからコマンドを実行している。

リテラル文字とメタ文字

リテラル文字…文字そのものを表現する際に用いる

メタ文字…シェルにとって意味をもった文字で、実際にコマンドが実行される前に、別の文字列に置き換えられるもの。

                 ...カレントユーザのホームディレクトリに置換

$変数名        ...変数に格納されている値に置換

` コマンド `  ...コマンドを実行したときに出力される文字列に置換

                  ...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

状況に応じて使い分ける必要がある。

 

以上!!!!!!!