변수에 큰따옴표가 필요합니까?

변수에 큰따옴표가 필요합니까?

쉘 변수를 큰따옴표로 묶으면 혼란스러워집니다.
특히 다음 sed 대체 명령을 사용합니다.

sed -i.tmp "/$MY_VAR/d" /foo/bar/file.txt  

그러나 나는 인용하지 않습니다 $MY_VAR. 맞습니까? 그렇지 않다면 어떻게 인용할 수 있습니까?
다음은 분명히 작동하지 않습니다

sed -i.tmp '/"$MY_VAR"/d' /foo/bar/file.txt  

답변1

첫 번째 명령에서는참조 변수.

두 번째 명령줄 인수로 전달된 문자열에는 sed큰따옴표가 있고 변수는 이 따옴표 안에 있으며 셸에 의해 확장됩니다.

지적했듯이 두 번째 명령은 작은 따옴표로 묶인 변수 값을 쉘이 확장하지 않기 때문에 (예상대로) 작동하지 않습니다.

$MY_VAR첫 번째 명령은 정확하지만 슬래시를 포함하면 문제가 발생합니다. 그렇다면 sed다음에 나타나지 않는 패턴에 대한 구분 기호를 선택하십시오 $MY_VAR.

sed "\@$MY_VAR@d"

변수는선두따옴표 안에 나타날 때. 변수를 "엄격하게 인용"할 필요는 없습니다.선두. 즉 "hello $world!", 문자열 내에서는 $world로 표시되지 않더라도 변수를 참조합니다 "$world".

중요한 것은 전체 문자열이 인용된다는 것입니다. 큰따옴표를 사용하면 쉘은 그 안에 있는 모든 변수를 확장합니다.

위의 예에서는 문자열이 "\@$MY_VAR@d"참조되고 그 안에 변수가 $MY_VAR있으므로 역시 참조됩니다(인용된 문자열 안에 있기 때문입니다).

관련 정보