나는 간단한 스크립트가 있습니다왜 bash + awk 스크립트에서 오류가 발생합니까?
#!/bin/sh
column=$1
awk '{print $'$column'}'
내가 실행하면 :
ls -la | ./Column.sh
내가 나타납니다
awk: {print $}
awk: ^syntax error
이유는 무엇입니까? 모두 올바른 것 같습니다.
나는 간단한 스크립트가 있습니다왜 bash + awk 스크립트에서 오류가 발생합니까?
#!/bin/sh
column=$1
awk '{print $'$column'}'
내가 실행하면 :
ls -la | ./Column.sh
내가 나타납니다
awk: {print $}
awk: ^syntax error
이유는 무엇입니까? 모두 올바른 것 같습니다.
스크립트가 원하는 것이 무엇인지 분명하지 않습니다.
이 오류의 원인은 스크립트에 인수를 전달하지 않기 때문입니다. 결과적으로 $1
은 비어 있습니다.
당신은 인쇄 할 열 번호를 전달해야
ls -la | ./Column.sh 1
은 열에있는 권한 열을 인쇄합니다 1.
Column.sh에 인수를 전달하지 않으므로 $ 1이 빈 문자열입니다. 아마도 당신이해야 할 일은 다음과 같습니다.
ls -a | while read name; do ./Column.sh $name; done
AWK 그렇게 AWK에 쉘 변수를 전달하는 기능을 가지고 당신은 당신의 awk 스크립트에 인용 게임을 할 필요가 없습니다 :
#!/bin/sh
awk -v "column=${1:-1}" '{print $column}'
나는 매개 변수가 지정되지 않은 경우 1의 기본값을 제공하기 위해 쉘의 "기본값"메커니즘을 사용합니다.