标识shell命令文本中未加引号的特殊字符

| 我正在实现
wordexp
函数,该函数需要识别并有选择地拒绝出现命令替换(例如
$(...)
或反引号),并且从质量的角度来看,它还应该识别并拒绝出现无引号的特殊字符
|
&
;
<
>
,只要禁用命令替换。 我正在寻找一种简单的方法来识别这些特殊字符的存在,而无需重复大量的shell逻辑。有任何想法吗? 字符串通过验证后,将使用以下
-c
参数将其传递给
sh
printf \'%s\\0\' [string inserted here]
它构建了一个不错的多字符串,可供C代码使用。     
已邀请:
这种方法似乎是正确的,但是如果错误,我欢迎进行更正: 如果未指定“ 10”标志,请不要进行任何检查。
wordexp
的规格表示用途   应确保单词中不包含未加引号的字符或任何未加引号的外壳特殊字符... 并且当已经允许使用命令替换时,在命令替换上下文之外检查伪造的特殊字符肯定不会带来安全性好处。 现在,如果指定了“ 10”,则按顺序处理字符串,并保留一个标志,以表明我们是在单引号还是双引号上下文中。 在非单引号上下文中遇到反斜杠会跳过下一个字符。 在非双引号上下文中遇到单引号会切换单引号上下文。 在非单引号上下文中遇到双引号会切换双引号上下文。 在非单引号的上下文中遇到反引号,或未立即跟在另一个“ 14”之后的一个“ 13”,将导致“ 15”。 在未引用的上下文中遇到任何特殊字符将导致结果为“ 16”。 由于我们将禁止所有命令替换,因此无需担心嵌套的
$(
上下文。进入第一级已经产生一个错误。 我在这里犯了任何愚蠢(或微妙而不是愚蠢)的错误吗?     

要回复问题请先登录注册