문자열을 변수로 바꾸는 방법은 무엇입니까?

문자열을 변수로 바꾸는 방법은 무엇입니까?

동일한 파일이 포함된 일련의 디렉터리를 가져와 파일의 텍스트 문자열을 디렉터리 이름과 일치하는 변수로 바꾸는 루프가 포함된 스크립트를 작성하려고 합니다.
변수는 $i=3,4,5이고 파일 이름은 FILE입니다
. 지금까지 작성한 내용은 다음과 같습니다.

for i in ./*z  
do
  cd $i  
  if  
    grep -q 'DZ' FILE
  then
    sed -i 's/DZ/$iZ/g' FILE
  fi  
  cd ..  
done

변수를 변경하지 않고 DZ 대신 $iZ를 얻습니다.
이 문제를 어떻게 해결할 수 있나요?

답변1

GNU 시스템에서 파일 DZ의 모든 항목을 로 바꾸고 싶다고 가정해 보겠습니다 ./fooz/FILE.fooZ

grep -lZe DZ -- *z/FILE |
  xargs -r0 perl -pi -e '
    my $repl = "${1}Z" if $ARGV =~ m{(.*?)z/};
    s/DZ/$repl/g' --

답변2

변수를 확장하려면 "sed 줄에 작은따옴표가 아닌 큰따옴표를 사용해야 합니다. '그렇지 않으면 $i여전히 확장이 없습니다. 또한 Z변수의 일부가 아니기 때문에 구문을 사용하는 구분 기호가 필요합니다 ${i}. 따라서 스크립트는 다음과 같아야 합니다.

for i in ./*z  
do
  cd $i  
  if  
    grep -q 'DZ' FILE
  then
    sed -i "s/DZ/${i}Z/g" FILE
  fi  
  cd ..  
done

관련 정보