命令行变量输出字符串中的转义点和星号

命令行变量输出字符串中的转义点和星号

我有一个命令可以通过如下命令设置环境变量:

BLACKLIST=$(python tools.py gen-blacklist)

*这会产生一个包含点和星号的字符串*,如下所示:

LISTEN,UNLISTEN,NOTIFY,SHOW,REFRESH,pg_notify,.*remove,.*delete,.*update,.*create,.*insert

我希望能够转义字符串中的所有点和星号,这就是我尝试过的:

TEMP=$(python tools.py gen-blacklist) && BLACKLIST=$(echo ${TEMP/.\*/\\.\\*}) && echo $BLACKLIST

但它只会在第一次出现时替换。

LISTEN,UNLISTEN,NOTIFY,SHOW,REFRESH,pg_notify,\.\*remove,.*delete,.*update,.*create,.*insert

我如何逃避所有出现的*.

答案1

闻起来像 xy 问题,但无论如何......

参数扩展,这就是手册中关于${parameter/pattern/string}-style 扩展的内容 -

如果模式以“/”开头,则模式的所有匹配项都将替换为字符串。通常只替换第一个匹配项

因此${TEMP/.\*/\\.\\*}需要更改为(注意紧随其后的${TEMP//.\*/\\.\\*}附加内容)。/TEMP

这产生 LISTEN,UNLISTEN,NOTIFY,SHOW,REFRESH,pg_notify,\.\*remove,\.\*delete,\.\*update,\.\*create,\.\*insert

答案2

引用更多 (™) ....

尝试:

TEMP=$(python tools.py gen-blacklist) &&
echo "$TEMP"

如果您确实需要转义点和星号,请使用(在 bash 中):

TEMP=$(python tools.py gen-blacklist) &&
BLACKLIST=${TEMP//\.\*/\\.\\*} &&
echo "$BLACKLIST"

相关内容