printf escape% q string vs variável [duplicado]

0

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?

    
por monkeywrench 23.03.2018 / 14:08

2 respostas

2

Você precisa citar a variável

testpath="/path/to/first dir/dir/" && printf '%q' "$testpath"
    
por 23.03.2018 / 14:14
1
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

    
por 23.03.2018 / 14:15

Tags