sed는 매개변수의 값을 대체합니다.

sed는 매개변수의 값을 대체합니다.

간단한 작업처럼 보이지만 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' '{}' ';'

보간이 작동합니다. 마지막에 따옴표가 필요한지 확실하지 않지만 ...

관련 정보