2014-03-04 5 views
0

나는 다음과 같은 배쉬 있습니다사용하여 TXT 파일의 라인 # 1에서 변수를 삽입 나오지

#!/bin/bash 
if ["$#" -ne "1"]; then 
    echo "Usage: `basename $0` <HOSTNAME>" 
    exit 1 
fi 

IPADDR=`ifconfig | head -2 | tail -1 | cut -d: -f2 | rev | cut -c8-23 | rev` 
sed -i -e '1i$IPADDR $1\' /etc/hosts 

을하지만 cat /etc/hosts

$IPADDR 

가 어떻게 이러한 문제를 처리 할 수 ​​있습니까?

+1

IP 주소를 추출하는 더 신뢰할 수있는 방법이 있습니다. 예를 들어 [IP 주소를 bash 변수에 넣기]를 참조하십시오. 더 좋은 방법이 있습니까?] (http://stackoverflow.com/q/6829605/1331399). – Thor

+0

고마워 ... 정답 : – MLSC

답변

3

작은 따옴표 안에있는 변수 '은 쉘에 의해 확장되지 않고 변경되지 않습니다. 확장하려는 변수를 인용하려면 큰 따옴표 "을 사용하거나 여기에 불필요한 경우 따옴표를 사용하지 마십시오. 전술 한 라인에서 $IPADDR

sed -i -e '1i'$IPADDR' '$1'\' /etc/hosts 

$1 따옴표의 외부와 인수 sed에 공급되는 전에 쉘 확장한다.

+0

당신은 내가'$ 1'을 (를) 인자로 가지고 있다는 것을 알고 있습니다 ... 어때요? – MLSC

+1

@MortezaLSC : 같은 패턴으로 작은 따옴표 밖에 두지 말고 편집을 참조하십시오. –

+0

감사합니다 ... 나는 그것을 검사 할 것입니다 – MLSC

2

작은 따옴표는 문자열이 변수로 보간되지 않음을 의미합니다.

#!/bin/bash 
IPADDR=$(/sbin/ifconfig | head -2 | tail -1 | cut -d: -f2 | rev | cut -c8-23 | rev) 
sed -i -e "1i${IPADDR} ${1}" /etc/hosts 

는 또한 습관에서 $(...)에서 명령을했다!

+0

감사합니다 ... 좋은 방법 ... 우리는 혼동하지 마십시오 .. – MLSC