디렉토리를 재귀적으로 검색하고 교체하여 한 문자열을 다른 문자열로 변경하는 간단한 bash 함수를 작성하려고 합니다. 이것이 내가 얻는 것입니다:
function sar () {
from="$1"
shift
to="$1"
shift
if [[ $from == '' || $to == '' ]]
then
echo Usage: sar \<from\> \<to\> \<filename\>
return
fi
while [[ $# -gt 0 ]]
do
filename="$1"
shift
find ./$filename -type f -exec sed -i -e 's/$from/$to/g' {} \;
done
}
예를 들어:
$ sar xxxx yyyy mydir
./mydir에서 실행 find
하고 액세스하는 모든 파일에서 xxxx를 yyyy로 바꿔야 합니다. 명령은 오류 없이 실행되지만 대체를 수행하지는 않습니다.
와 함께 set -x
실행
+ find ./mydir -type f -exec sed -i -e 's/$from/$to/g' '{}' ';'
$from
해결 되지 $to
않았으며 몇 가지 추가 참조가 나타났습니다.
bash 함수에서 이 명령을 작성하는 올바른 방법은 무엇입니까(bash 스크립트와 동일한 구문 규칙을 따른다고 가정합니다)?
답변1
작은따옴표 안에 변수를 넣으면 확장되지 않으므로 큰따옴표를 사용해야 합니다.
... sed -i -e "s/$from/$to/g" ...