양식에 쉘 sed
변수를 사용할 수 없습니다 $NUMBER
. 내 쉘 스크립트에는 다음 줄이 있습니다.
cat shared.txt sed 's/whatever1/$2 ... whatever2/' > shared2.txt
결과 shared2.txt
는 다음과 같습니다.
...$2....
내가 뭘 잘못했나요?
답변1
작은따옴표 대신 큰따옴표를 사용해 보세요.
sed "s/whatever1/$2 ... whatever2/" shared.txt > shared2.txt
답변2
큰따옴표를 사용하면 효과가 있지만 어떤 경우에는 원하는 결과를 얻지 못할 수도 있습니다. 예를 들어,
t="bcd"
echo '123$tbcd' | sed "s/$t$t//"
(예, 이것은 약간 인위적인 것입니다!) 특정 문자를 이스케이프 처리하면 이를 방지할 수 있습니다.
echo '123$tbcd' | sed "s/\$t$t//"
그러나 이것을 놓치기 쉽습니다. 제 생각에는 가장 안전한 접근 방식은 변수를 큰따옴표로 묶고(공백이 sed 명령을 방해하지 않도록) 나머지 문자열을 작은따옴표로 묶는 것입니다(특정 문자를 이스케이프할 필요가 없도록 하기 위해).
echo '123$tbcd' | sed 's/$t'"$t"'//'.