我想用空白转义路径,当我像这样直接使用它时效果很好:
$ 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