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

관련 정보