首页 > 解决方案 > 在 POSIX sh 中,字符串替换是未定义的。在尝试做 PASS2="${PASS//[${special_chars}]/}"

问题描述

我的代码是

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}"]/)

这些在功能上不起作用。

标签: posixshellcheck

解决方案


此脚本通过 shellcheck:

#!/bin/sh

special='!@#$%&'
PASS="e@0cc3auZeeSio&G"
PASS2=$(printf %s "$PASS" | tr -d "$special")
echo "$PASS2"

推荐阅读