2013-09-05 2 views
-2

이 웹 사이트 및 다른 온라인 소스에서 발견 한 바에 따르면 변수 주위에 큰 따옴표를 사용한다고합니다. 그러나 그것은 나를 위해 일하지 않습니다. 예를 들어bash에서 변수를 사용하여 grep하는 방법

: 내 변수는 $GTUNNELNATNETIP

[johnwayne:630 ~] GTUNNELNATNETIP=`cat iptables.out |awk '{print $NF}'|cut -d "/" -f1` 
[johnwayne:631 ~] echo $GTUNNELNATNETIP 
10.19.192.0 
[johnwayne:632 ~] 

입니다

내가에서 찾고 있어요 파일이 따옴표없이 검색 iptables2.out

이 값을 발견하지만 오류없이

[johnwayne:632 ~] grep $GTUNNELNATNETIP iptables2.out 
grep: : No such file or directory 
iptables2.out:-A POSTROUTING -s 10.19.192.0/22 -o eth1 -j SNAT --to-source 64.134.58.175 
[johnwayne:633 ~] 

d와 함께 작동하지 않습니다. ouble 또는 작은 따옴표. 또는 다른 형식 나는

[johnwayne:633 ~] grep "$GTUNNELNATNETIP" iptables2.out 
grep: Trailing backslash 
[johnwayne:634 ~] grep '$GTUNNELNATNETIP' iptables2.out 
[johnwayne:635 ~] grep `echo $GTUNNELNATNETIP` iptables2.out 
grep: : No such file or directory 
iptables2.out:-A POSTROUTING -s 10.19.192.0/22 -o eth1 -j SNAT --to-source 64.134.58.175 
[johnwayne:636 ~] /bin/grep $GTUNNELNATNETIP iptables2.out 
/bin/grep: : No such file or directory 
iptables2.out:-A POSTROUTING -s 10.19.192.0/22 -o eth1 -j SNAT --to-source 64.134.58.175 
[johnwayne:637 ~] 

내가 파일 및 디렉토리가 존재하는 경우

[johnwayne:637 ~] grep 10.19.192.0 iptables2.out 
-A POSTROUTING -s 10.19.192.0/22 -o eth1 -j SNAT --to-source 64.134.58.175 
[johnwayne:638 ~] 

가 왜 그 그렙 오류가 발생 오류없이 실제 값을 전달할 때 작동

을 시도했습니다? 그리고 어떻게 오류없이 변수를 전달할 수 있습니다. grep이 리턴하는 라인 수를 세어보고 정확히 iptables 명령어를 얻으 려하는데 파일 이름이 보이지 않습니다. 이 같은

:

[johnwayne:637 ~] /bin/grep 10.19.192.0 iptables2.out 
-A POSTROUTING -s 10.19.192.0/22 -o eth1 -j SNAT --to-source 64.134.58.175 
[johnwayne:638 ~] 

이 반대가 :

[johnwayne:620 ~] grep $GTUNNELNATNETIP iptables2.out 
grep: : No such file or directory 
iptables2.out:-A POSTROUTING -s 10.19.192.0/22 -o eth1 -j SNAT --to-source 64.134.58.175 
[johnwayne:621 ~] 
+0

''echo "$ GTUNNELNATNETIP"''의 출력을 제공 할 수 있습니까? –

+0

'echo "의 출력을 보여줍니다. $ GTUNNELNATNETIP"| 고양이 -vte'? – anubhava

답변

3

당신은

grep "$GTUNNELNATNETIP" iptables2.out 

Read more about quoting variables in bash
이 일을해야 인용한다.

나는 당신의 trailing backslash 오류를 재현 할 수는 없지만 대부분의 아마 당신은 문제가 따옴표없이 echo $GTUNNELNATNETIP는 "사소한"쉘 특수 문자를 제거하려면 쉘 원인이다 $GTUNNELNATNETIP 변수

+0

그러나 질문에서 그는 그것을 시도하고'grep : Trail backslash'를 보았다고 말합니다. – user000001

2

에 약간의 쓰레기가 있습니다. echo "$GTUNNELNATNETIP"을 사용하면 실제로 후행 백 슬래시가 있고 다른 문제가있을 수 있습니다.

할당 uses cat uselessly을 (더 나은 아직,. 당신의 변수를 검사 printf, set, 또는 env을 사용하는 방법을 배우게) 어쨌든 몇 가지 추가 리팩토링을 사용할 수 있습니다. 이 시도?

GTUNNELNATNETIP=$(awk '{split(/\//,g,$NF); print g[1] }' iptables.out) 

...하지만 값의 결함이 정확히 무엇인지 모르기 때문에 문제를 아직 해결하지 못했습니다. 인쇄하기 전에 gsub(/\\/,"",g[1]);을 붙이시겠습니까?

관련 문제