printfは文字列%qと変数をエスケープします。

printfは文字列%qと変数をエスケープします。

スペースを使用してパスをエスケープしたいです。次のように直接使用するとうまく機能します。

$ 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

関連情報