パスをシェルにコピペできる形で表示
問題
パスを表示するときは、ユーザーがシェルにコピペできる形で表示すると便利です。
基本的には、ダブルクォーテーション(「"」)で囲めばOKですが、 OSによって扱いが異なります。
解決
Windows(コマンドプロンプト)の場合
Windowsでは単にダブルクォーテーションで囲めば、問題は起きなさそうです。
というのも、% \ などの特殊文字がパス名に使えませんし、 そもそもコマンドプロンプト自体をほとんど使いません。
Linux(Bash)の場合
ダブルクォート
Bashには変数展開があるので、ダブルクォートで囲んだ上でエスケープが必要です。
エスケープが必要なのは基本的に「$」「`」「\」「"」の4種類です。 履歴展開を使う場合は「!」も必要です。
echo "Pa\th/With/$ymbols" # 期待しない出力
echo "Pa\\th/With/\$ymbols" # Pa\th/With/$ymbols
シングルクォート
シングルクォート(「'」)で囲めば、文字をエスケープする必要は生じませんが、 シングルクォートをシングルクォートの中で使うことはできません
echo 'Pa\th/With/$ymbols!' # => Pa\th/With/$ymbols!
echo "Path/With/Single'Quote" # => Path/With/Single'Quote
echo 'Path/With/Single'Quote' # エラー(パス中のシングルクォートが誤認識される)
$'string' 記法
なお、Linuxではスラッシュと\0以外のすべての文字がファイル名に使えますが、
普通のプログラミング言語と違い、Bashのダブルクォートの中では \n
のような記法は使えません。
改行やタブの場合は直接書いても何とかなりますが、$'string'
という記法もあります。
string
の部分に \n
\t
\xHH
などを書けます。
ただし、一度ダブルクォーテーションの囲みを中断する必要があります。
$ echo "/Path/With/New"$'\n'"Line"
/Path/With/New
Line