【发布时间】:2020-07-22 01:36:28
【问题描述】:
我的代码是
special_chars='[=!=][=@=][=#=][=$=][=%=][=&=]'
PASS="e@0cc3auZeeSio&G"
PASS2="${PASS//[${special_chars}]/}"
我希望 PASS2 包含 PASS 中的所有字符 - 特殊字符。 这工作正常,但有外壳检查错误。
PASS2="${PASS//[${special_chars}]/}"
^-- SC2039: In POSIX sh, string replacement is undefined.
我试过了
PASS2=$(printf '%s' "$PASS2" | PASS//["${special_chars}"]/)
和
PASS2=$(printf '%s' "$PASS" | PASS//["${special_chars}"]/)
这些在功能上不起作用。
【问题讨论】:
-
Shellcheck 试图告诉您参数扩展中的
//构造不是有效的 POSIX(这是一种 bashism)。也不清楚 special_chars 应该做什么。请告诉我们转换后的PASS2应该是什么。是否要删除每个字符 !@$%&?
标签: posix shellcheck