2014-12-02 2 views
0

echo를 사용하여 두 변수를 인쇄하는 데 문제가 있습니다. 아래echo를 사용하여 변수를 인쇄하는 중에 발생하는 문제

tdaydatefile=$(date +'%m%d%Y') 
ip=$(ip route get 8.8.8.8 | awk 'NR==1 {print $NF}') 
echo "Dumping all network connections to $HOME/MyLog/netstat_$ip_$tdaydatefile.csv!" 

스크립트가 실행, 그것은 단지 인쇄 : - -이 :

Dumping all network connections to /root/MyLog/netstat_12022014.csv! 

그것은의 IP 주소 (IP 변수)를 인쇄하지 않습니다 아래는 스크립트의 코드는 체계. echo에서 tdaydatefile로 ip를 바꾸면 ip를 출력하고 tdaydatefile 변수를 무시합니다.

무엇이 잘못 될 수 있으리라 생각합니다.

+0

'ip_'은 유효한 변수 이름입니다. 정의되지 않은 변수를 덤프하고 있습니다. '{$ ip}'를 시도하거나 대시,'...- $ ip- $ tday'를 사용하십시오. –

+0

사용중인 언어로이 태그를 지정해야합니다. – Scimonster

+2

@MarcB :'netstat _ $ {ip} _ $ tdaydatefile'을 의미하는 것으로 생각합니다. 여기서 중괄호는 변수 이름 앞에 $가 붙는 곳입니다. –

답변

2

_이 유효한 변수 이름 문자이므로 변수 이름이 끝나는 쉘을 알려야합니다. (당신의 코드에서, 쉘은 변수 이름으로 ip_ 해석합니다.)

이 즉,이 경우 ${ip}를 사용 {...}에 변수 이름을 둘러싸하여 수행 할 수 있습니다 :

echo "Dumping all network connections to $HOME/MyLog/netstat_${ip}_$tdaydatefile.csv!" 

참고가 아니에요 $HOME 또는 $tdaydatefile이 필요합니다. /.은 유효한 변수 이름 문자가 아니기 때문입니다.

그러나 의심스러운 경우 ${...} —을 사용하면 가독성을 높일 수 있습니다.

+0

사무실에서의 로컬 코딩 규칙은 "항상 $ {name}"으로 묶인 모든 변수 이름 참조입니다. 나는 그것에 열중하지 않지만 체계적이며 자동으로 고칠 수 있습니다. –

+0

@JonathanLeffler : 개인적으로는 기술적으로 필요한 경우에만 사용하고 확장 문자열에서는 가독성을 위해 사용합니다. 중괄호는 입력하기가 쉽지 않기 때문입니다. 그런 짧은 대답은 필요하지 않지만, 나는 게시물의 요점에 빨리주의를 환기시키는 데 유용한 핵심 구절을 강조합니다. 그것은 개인용으로 노트를 작성할 때도 사용하는 기술입니다. – mklement0

+0

스타일이 복잡합니다. 나는 주로 자신의 코드에서'$ {variable} '대신'$ variable'을 사용하지만, 직장에서 부과 된 규칙에는 약간의 지혜가 있습니다. 답변 형식화 스타일도 마찬가지로 복잡하지만 굵게 유지하는 것이 일반적으로 좋은 아이디어이지만 매우 주관적입니다. –

관련 문제