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

와일드카드 및 토큰화를 방지하기 위해 변수 주위에 큰따옴표가 있습니다.

관련 정보