我有一个命令可以通过如下命令设置环境变量:
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"