내가 내 bashscript에서 AWK를 사용하려면,이 라인이 명확하게 작동하지 않습니다 : 그것은하지 않도록탈출 달러 기호
line="foo bar"
echo $line | awk '{print $1}'
가 어떻게, $1
을 탈출 할 스크립트의 첫 번째 인수로 대체 되었습니까? 합니다 (awk 스크립트 주위에 작은 따옴표 포함)
내가 내 bashscript에서 AWK를 사용하려면,이 라인이 명확하게 작동하지 않습니다 : 그것은하지 않도록탈출 달러 기호
line="foo bar"
echo $line | awk '{print $1}'
가 어떻게, $1
을 탈출 할 스크립트의 첫 번째 인수로 대체 되었습니까? 합니다 (awk 스크립트 주위에 작은 따옴표 포함)
스크립트가 예상대로 작동합니다
$ cat script-single
#!/bin/bash
line="foo bar"
echo $line | awk '{print $1}'
$ ./script-single test
foo
다음을하지만, 것이다 휴식 (스크립트를 출력 빈 줄) :
$ cat script-double
#!/bin/bash
line="foo bar"
echo $line | awk "{print $1}"
$ ./script-double test
awk
프로그램 주위에 큰 따옴표가 표시되어 있습니다.
따옴표가 $1
변수를 확장하기 때문에, awk 명령은 (비어있는)이 AWK 변수 test
의 내용을 인쇄 스크립트 {print test}
을 얻을 것이다. 여기에 표시하는 스크립트입니다 그 :
$ cat script-var
#!/bin/bash
line="foo bar"
echo $line | awk -v test=baz "{print $1}"
$ ./script-var test
baz
로서 현재 기록은 $ 1 교체되지 않습니다 (이 단일 인용 문자열 내에서 이후, bash는 그것을 구문 분석하지 않습니다)
당신이 awk "{print $1}"
작성하는 경우, bash는 변수 확장 규칙이 바깥 쪽 리터에 의존한다는 이중 인용 된 문자열 내에서
주를 $1
을 확장합니다 따옴표를 붙이십시오, 따라서
에서
$1
는 확장 될 것입니다. ''$ line "'의 첫번째 단어가 될 것입니다. – user000001'awk'"프로그램 "을 둘러싼 작은 따옴표의 목적은 bash가 매개 변수 확장을 시도하지 않으므로 스크립트가 다음과 같이 작동한다는 것입니다. 예상했다. –
@CostiCiudatu 단어 확장입니다 – SheetJS