スペースを使用してパスをエスケープしたいです。次のように直接使用するとうまく機能します。
$ printf '%q' "/path/to/first dir/dir/"
/path/to/first\ dir/dir/
文字列の代わりに変数を使用すると、空白のない文字列が返されます。
$ testpath="/path/to/first dir/dir/" && printf '%q' $testpath
/path/to/firstdir/dir/
printfと変数を使用してパスからスペースをエスケープする方法はありますか?それとも、awk/sed/regexを使用しない他の単純なソリューションはありますか?
答え1
変数を参照する必要があります。
testpath="/path/to/first dir/dir/" && printf '%q' "$testpath"
答え2
testpath="/path/to/first dir/dir/"
printf '%q' "$testpath"
シェルから正しく引用する方法を学ぶことは非常に重要です。
スペース/メタ文字を含むすべてのリテラルは「二重引用符」として扱われます。すべて拡張:
"$var"
、、、、。"$(command "$var")"
コードやテキストについてはを参照してください。"${array[@]}"
"a & b"
'single quotes'
$'s: 'Costs $5 US'
ssh host 'echo "$HOSTNAME"'
http://mywiki.wooledge.org/Quotes
http://mywiki.wooledge.org/Arguments
http://wiki.bash-hackers.org/syntax/words