Você precisa citar a variável
testpath="/path/to/first dir/dir/" && printf '%q' "$testpath"
Eu gostaria de escapar do caminho com espaço em branco, que funciona bem quando eu o uso diretamente assim:
$ printf '%q' "/path/to/first dir/dir/"
/path/to/first\ dir/dir/
Quando eu uso uma variável em vez de uma string, o retorno é uma string sem nenhum espaço em branco:
$ testpath="/path/to/first dir/dir/" && printf '%q' $testpath
/path/to/firstdir/dir/
Existe alguma maneira de escapar do espaço em branco em um caminho com printf e uma variável. Ou qualquer outra solução simples sem usar o awk / sed / regex?
testpath="/path/to/first dir/dir/"
printf '%q' "$testpath"
Aprenda a citar corretamente no shell, é muito importante:
"Double quote" every literal that contains spaces/metacharacters and every expansion:
"$var"
,"$(command "$var")"
,"${array[@]}"
,"a & b"
. Use'single quotes'
for code or literal$'s: 'Costs $5 US'
,ssh host 'echo "$HOSTNAME"'
. See http://mywiki.wooledge.org/Quotes
http://mywiki.wooledge.org/Arguments
http://wiki.bash-hackers.org/syntax/words