助け合いフォーラム

LinuC

LinuC Lv1-101(Ver10.0)
問題ID : 14915
問題を開く
ホームディレクトリに\workディレクトリを作成することができるコマンドはどれか

正解

mkdir ~/\\work

解説

「\(バックスラッシュ)」はシェルによって特別に解釈されるメタキャラクタの1つです。「\」は次に続くメタキャラクタの意味を打ち消して通常の文字として扱います。

以下は主なメタキャラクタをまとめたものです。


設問では名前に「\(バックスラッシュ)」のつくディレクトリを作成したいので、「\」をエスケープする(メタキャラクタとして扱わない)ようにする必要があります。その場合、バックスラッシュを2つつなげることで、「\」を文字として扱うことができます。

よって正解は
・mkdir ~/\\work
です。

以下は実行例です。


その他の選択肢については以下の通りです。
・mkdir ~/\work
「\」に続くメタキャラクタがないため、mkdirコマンドへの引数としては「(ホームディレクトリパス)/work」が渡されます。この場合、『ホームディレクトリに「work」ディレクトリを作成する』ことになるので、誤りです。

・mkdir '~/\\work'
「~/\work」全体を「'(シングル・クォーテイション)」で囲んでいるため、ホームディレクトリを意味するメタキャラクタ「~(チルダ)」と「\」がともに無視され、mkdirコマンドへの引数としては「~/\\work」が渡されます。この場合、『現在のディレクトリで「~」ディレクトリ配下に\\workディレクトリを作成する』ことになるので、誤りです。

・mkdir "~/\\work"
「~/\work」全体を「"(ダブル・クォーテイション)」で囲んでいるため、ホームディレクトリを意味するメタキャラクタ「~(チルダ)」だけが無視され、mkdirコマンドへの引数としては「~/\work」が渡されます。この場合、『現在のディレクトリで「~」ディレクトリ配下に\workディレクトリを作成する』ことになるので、誤りです。

・mkdir ~\\work
mkdirコマンドへの引数としては「~\work」が渡されますが、ホームディレクトリを意味するメタキャラクタ「~(チルダ)」に続けてディレクトリを意味する「/(スラッシュ)」がないため、『現在のディレクトリで「~\work」ディレクトリを作成する』ことになるので、誤りです。

以下はstaffユーザーでの上記コマンドの実行例です。

参考

メタキャラクタは、シェルによって特別に解釈される文字です。

以下は主なメタキャラクタとディレクトリ関連の特殊記号をまとめたものです。


例えばechoコマンドの引数に「*」を指定した場合、シェルは「*」を表示せずカレントディレクトリの内容を表示します。これは、シェルが「*」をメタキャラクタとして特別に認識するためです。

$ echo *
file1 file2

シェルがメタキャラクタを通常の文字として扱う(メタキャラクタをエスケープする)ためには、以下のような方法があります。

・「\」(環境によっては「¥」が表示される)をメタキャラクタの直前に付ける

$ echo \*
*

・「'」でメタキャラクタまたはメタキャラクタを含む文字列を囲む

$ echo '*'
*

・「"」でメタキャラクタまたはメタキャラクタを含む文字列を囲む

$ echo "*"
*

なお、「"」で囲まれた「$」、「`」、「\」、「"」は文字ではなくメタキャラクタとして扱われます。

例)
$ DATE=date
$ echo "$DATE"
date

「"」で囲まれていても「$」はメタキャラクタとして扱われるため、「$DATE」とは表示されず、変数に格納されている値が表示されます。
つまり、「echo "$DATE"」と「echo $DATE」の実行結果は同じです。

例)
$ echo "`date`"
2012年 1月 12日 木曜日 15:00:40 MST

「"」で囲まれていても「`」はメタキャラクタとして扱われるため、「`date`」とは表示されず、dateコマンド(現在の日付と時刻を表示)の実行結果が表示されます。
つまり、「echo "`date`"」と「echo `date`」の実行結果は同じです。
上に戻る

不正解の選択肢の解説について

投稿日 2025/11/25

不正解の選択肢である下記2つについて
 mkdir '/\work'
 mkdir "
/\work"
それぞれ現在のカレントディレクトリにディレクトリ名「/\work」とディレクトリ名「/\work」ディレクトリが作成されるのではないでしょうか?
クウォートで囲まれた部分は文字列と見なされるとのことなのでそう思いました。
なぜ下記解説のようになるのかわかりません。
ご教授願います。

【問題の解説文引用】
・mkdir '/\work'
/\work」全体を「'(シングル・クォーテイション)」で囲んでいるため、ホームディレクトリを意味するメタキャラクタ「(チルダ)」と「\」がともに無視され、mkdirコマンドへの引数としては「/\work」が渡されます。この場合、『現在のディレクトリで「」ディレクトリ配下に\workディレクトリを作成する』ことになるので、誤りです。
・mkdir "
/\work"
/\work」全体を「"(ダブル・クォーテイション)」で囲んでいるため、ホームディレクトリを意味するメタキャラクタ「(チルダ)」だけが無視され、mkdirコマンドへの引数としては「/\work」が渡されます。この場合、『現在のディレクトリで「」ディレクトリ配下に\workディレクトリを作成する』ことになるので、誤りです。

2025/11/26 11:08

解説の内容は、実行結果の話ではなくて
「こういう意味としてシェルに解釈されるよ、意図と違いますね」という話だと思います。

ちなみに、不正解のコマンドを実行してもエラーが発生するはずです。
/は「'(シングル・クォーテイション)」や「"(ダブル・クォーテイション)」で囲んでおいても、パス区切り文字の扱いで機能してしまいます。
そこまで追った場合、/は名前に使えない、~という名前のディレクトリは通常存在しないなどが関連してきますがこの問題の学習目的とずれてきそうです。


コメント

g gagaga0202

2025/11/26 11:53

ご確認およびご回答ありがとうございます。 >/は「'(シングル・クォーテイション)」や「"(ダブル・クォーテイション)」で囲んでおいても、パス区切り文字の扱いで機能してしまいます。 上記内容の理解が浅かったです。 カレントディレクトリに「/」を含んだ名前のディレクトリが作成されるものと思っていました。 ご教授いただきありがとうございました。

この返信に対して
コメントを記入できます

この投稿に対して返信しませんか?