출력을 필터링하고 traceroute
이를 쉘 변수(배열)에 저장해야 합니다. 그런데 좀 특이한 결과가 나오네요.
다음 줄에서 설명하려고합니다.
내 현재 디렉터리는 이며 temp
일부 파일은 다음과 같습니다.
/temp$ ls
ask.html data_dump (2) DB-Assignemnt .sql
traceroute
명령줄에서 실행 하면 예상한 대로 출력이 정확합니다.
/temp$ traceroute -m 5 www.google.com | awk '{print $2 , $3}'
to www.google.com
172.22.0.1 (172.22.0.1)
ABTS-North-Static-085.3.160.122.airtelbroadband.in (122.160.3.85)
* *
203.101.83.197 (203.101.83.197)
182.79.254.249 (182.79.254.249
출력을 변수에 저장하면a
/temp$ a=$(traceroute -m 5 www.google.com | awk '{print $2 , $3}')
echo $a
출력을 이해할 수 없을 때 .
~/temp$ echo $a
to www.google.com 172.22.0.1 (172.22.0.1) ABTS-North-Static-
085.3.160.122.airtelbroadband.in (122.160.3.85) Ask.html data_dump (2) DB-Assignemnt. SQLAsk.html data_dump (2) DB-Assignemnt .sql Ask.html data_dump (2) DB-Assignemnt .sql Ask.html data_dump (2) DB-Assignemnt .sql
203.101.100.186 (203.101.100.186)
ls
자체적으로 실행되고 입력이 변수에 저장되는 이유는 무엇 입니까 a
?
답변1
를 실행하면 echo $a
쉘이 "단어 분리"를 수행하고 모든 중요한 공백이 손실됩니다.
큰따옴표를 사용해 보세요 echo "$a"
.
인용하면 파일 이름 확장이 발생하지 않도록 할 수도 있습니다.
바라보다http://www.gnu.org/software/bash/manual/bashref.html#Shell-Expansions