助け合いフォーラム
正解
mkdir ~/\\work
解説
以下は主なメタキャラクタをまとめたものです。

設問では名前に「\(バックスラッシュ)」のつくディレクトリを作成したいので、「\」をエスケープする(メタキャラクタとして扱わない)ようにする必要があります。その場合、バックスラッシュを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`」の実行結果は同じです。
不正解の選択肢の解説について
不正解の選択肢である下記2つについて
mkdir '/\work'/\work"
mkdir "
それぞれ現在のカレントディレクトリにディレクトリ名「/\work」とディレクトリ名「/\work」ディレクトリが作成されるのではないでしょうか?
クウォートで囲まれた部分は文字列と見なされるとのことなのでそう思いました。
なぜ下記解説のようになるのかわかりません。
ご教授願います。
【問題の解説文引用】
・mkdir '/\work'/\work」全体を「'(シングル・クォーテイション)」で囲んでいるため、ホームディレクトリを意味するメタキャラクタ「
「(チルダ)」と「\」がともに無視され、mkdirコマンドへの引数としては「/\work」が渡されます。この場合、『現在のディレクトリで「」ディレクトリ配下に\workディレクトリを作成する』ことになるので、誤りです。/\work"
・mkdir "
「/\work」全体を「"(ダブル・クォーテイション)」で囲んでいるため、ホームディレクトリを意味するメタキャラクタ「(チルダ)」だけが無視され、mkdirコマンドへの引数としては「/\work」が渡されます。この場合、『現在のディレクトリで「」ディレクトリ配下に\workディレクトリを作成する』ことになるので、誤りです。
解説の内容は、実行結果の話ではなくて
「こういう意味としてシェルに解釈されるよ、意図と違いますね」という話だと思います。
ちなみに、不正解のコマンドを実行してもエラーが発生するはずです。
/は「'(シングル・クォーテイション)」や「"(ダブル・クォーテイション)」で囲んでおいても、パス区切り文字の扱いで機能してしまいます。
そこまで追った場合、/は名前に使えない、~という名前のディレクトリは通常存在しないなどが関連してきますがこの問題の学習目的とずれてきそうです。
コメント
この投稿に対して返信しませんか?
g gagaga0202
2025/11/26 11:53
ご確認およびご回答ありがとうございます。 >/は「'(シングル・クォーテイション)」や「"(ダブル・クォーテイション)」で囲んでおいても、パス区切り文字の扱いで機能してしまいます。 上記内容の理解が浅かったです。 カレントディレクトリに「/」を含んだ名前のディレクトリが作成されるものと思っていました。 ご教授いただきありがとうございました。