간단한 작업처럼 보이지만 sed 호출은 내가 보낸 IP 값을 대체하지 않았습니다. 대신, localhost를 "${IP}"로 대체합니다.
substitute() {
export IP=$1
echo $IP
LC_ALL=C find . -type f -name '*.txt' -exec sed -i.bak 's/localhost/"${IP}"/g' {} \;
}
substitute 10.20.30.40
전송된 값을 매개변수로 바꾸는 목적을 어떻게 달성합니까?
답변1
작은따옴표로 인해 ${IP}가 값에 삽입되지 않습니다. bash -x가 도움이 될 것입니다(즉, 스크립트에서 #!/bin/bash의 shebang에 -x를 추가하세요).
+ substitute 10.20.30.40
+ export IP=10.20.30.40
+ IP=10.20.30.40
+ echo 10.20.30.40
10.20.30.40
+ LC_ALL=C
+ find /tmp -type f -name '*.txt' -exec sed -i.bak 's/localhost/"${IP}"/g' '{}' ';'
서로 교환하면,
+ substitute 10.20.30.40
+ export IP=10.20.30.40
+ IP=10.20.30.40
+ echo 10.20.30.40
10.20.30.40
+ LC_ALL=C
+ find /tmp -type f -name '*.txt' -exec sed -i.bak 's/localhost/'\''10.20.30.40'\''/g' '{}' ';'
보간이 작동합니다. 마지막에 따옴표가 필요한지 확실하지 않지만 ...