这个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
请注意,我对变量进行了双引号,以防止通配和分词。