考虑以下 bash 函数:
function quote {
declare quoted=${1//\'/\'\\\'\'}
echo "'$quoted'"
}
此函数将参数包装在单引号中,并用字符串替换每个现有的单引号'\''
:
$ quote "a'b"
'a'\''b'
看起来函数体可以写成一行:
function my_quote {
echo "'${1//\'/\'\\\'\'}'"
}
但是,由于某种原因,这不起作用:
$ my_quote "a'b"
'a\'\\'\'b'
所以,我的问题是(1)为什么单行版本不起作用?(2)有没有办法让它起作用,比如说,添加更多的反斜杠?
顺便说一句,如果你很好奇,这个片段演示了为什么这样的函数很有用:
foo="some string generated at runtime, possibly containing special characters"
cmd="somecommand $(quote "$foo")"
ssh user@host "$cmd"