パスをシェルにコピペできる形で表示

問題

パスを表示するときは、ユーザーがシェルにコピペできる形で表示すると便利です。

基本的には、ダブルクォーテーション(「"」)で囲めば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

参考

Man page of BASH