【发布时间】:2014-01-14 20:53:51
【问题描述】:
Ubuntu (13.04) 中的 Bash 默认似乎有这个quote 功能:
quote ()
{
local quoted=${1//\'/\'\\\'\'};
printf "'%s'" "$quoted"
}
此函数应始终返回其第一个参数的正确 shell 转义版本。
是否有任何输入字符串会破坏此功能(即返回一个无法用于 shell 输入的字符串)?
例子:
quote "A string's but a string."
'A string'\''s but a string.'
quote "A newline *doesn't*seem to break anything..."
'A newline *doesn'\''t*
seem to break anything...'
【问题讨论】:
-
假设您可以在单引号字符串中包含转义的单引号,我想说有很多字符串无法用于 shell 输入。
-
该函数似乎来自我的 Ubuntu 12.04 上的
/etc/bash_completion。环顾第 187 行 -
我正在查看
quote \'的输出,但不确定输出应该代表什么。 -
@chepner 诀窍是尝试
eval echo "$(quote \')"。如果可以,那就没问题了。 -
或者,
quote() { printf "%q" "$1"; }