이 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
와일드카드 및 토큰화를 방지하기 위해 변수 주위에 큰따옴표가 있습니다.