从 bash 脚本值替换文件中的字符串

从 bash 脚本值替换文件中的字符串

这个bash脚本在Mac终端上运行,它需要询问用户输入$name,然后替换另一个文件中的字符串以包含用户输入PLACEHOLDER_BACKEND_NAME=$name

#!/bin/bash
read -r name

if ! grep -q PLACEHOLDER_BACKEND_NAME="\"$name\"" ~/path-to-file.sh; then
perl -pi -e 's/PLACEHOLDER_BACKEND_NAME.*/PLACEHOLDER_BACKEND_NAME=$name/g' ~/psth-to-file.sh
fi

perl 替换命令无法获取$name变量中的值。我对 Bash 不熟悉。

答案1

bash 不会扩展单引号字符串内的变量内容。您必须使用双引号字符串。

例子 :

这将打印:我的名字是:$name

name="haha"
echo 'my name is : $name'

这将打印:我的名字是:哈哈

name="haha"
echo "my name is : $name"

所以只需更换

perl -pi -e 's/PLACEHOLDER_BACKEND_NAME.*/PLACEHOLDER_BACKEND_NAME=$name/g' ~/psth-to-file.sh

perl -pi -e "s/PLACEHOLDER_BACKEND_NAME.*/PLACEHOLDER_BACKEND_NAME=$name/g" ~/psth-to-file.sh

答案2

变量不会在单引号内扩展。该$name变量位于单引号内。您可以通过去掉中间的单引号来解决这个问题:

perl -pi -e 's/PLACEHOLDER_BACKEND_NAME.*/PLACEHOLDER_BACKEND_NAME='"$name"'/g' ~/psth-to-file.sh

请注意,我对变量进行了双引号,以防止通配和分词。

相关内容