gpt4 book ai didi

linux - 在 shell 脚本中的捕获组中转义引号

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:56:56 26 4
gpt4 key购买 nike

我的 shell 脚本中有这一行:

MYSQL_GENPASS=($echo -e MYSQL_ROOT_PASSWORD=`openssl rand -base64 37 | sed -e 's/^\(.\{37\}\).*/\1/g'`)

稍后我调用这一行的输出:

echo -e "\nYour MySQL password ENV variable is: " $MYSQL_GENPASS

$MYSQL_GENPASS 输出也将在 docker-compose 脚本上调用。

如何转义捕获格式中的 "' 和 ` 字符?

最佳答案

我假设您在这里尝试做的是生成一个可以作为 shell 命令进行评估的字符串。 printf %q 是 ksh 中的一个扩展——被 bash 和其他人采用——它进行所有必要的转义以使字符串 eval 安全:

printf -v mysql_genpass 'MY_SQL_ROOT_PASSWORD=%q' "$(openssl rand -base64 37 | head -c 37)"

...将命令放入 $mysql_genpass 中,当使用 eval "$mysql_genpass" 或等效命令执行时,将设置 MY_SQL_ROOT_PASSWORD.

(printf -v var ...var=$(printf ...) 更有效地将格式字符串的评估结果分配给变量,如后者需要 fork 一个子 shell)。


也就是说,除非您有令人信服的理由这样做,否则最好避免将 shell 片段分配给标量变量。参见 BashFAQ #50 ("I'm trying to put a command in a variable, but complex cases always fail!") , 和 BashFAQ #48 ("Eval command and security issues") ;一般来说,最好将数据作为文字数据传递而不是生成代码。

关于linux - 在 shell 脚本中的捕获组中转义引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34774224/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com