공백을 사용하여 경로를 탈출하고 싶습니다. 다음과 같이 직접 사용할 때 잘 작동합니다.
$ 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