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"

学习如何在shell中正确引用,这非常重要:

“双引号”包含空格/元字符的每个文字以及每一个扩张:"$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

相关内容