어색한 스크립트에서 셸 변수를 사용하려면 어떻게 해야 하나요?
외부 셸 변수를 awk
스크립트에 전달하는 몇 가지 방법을 찾았지만 및
에 대해 혼란스러워합니다.
먼저 셸 스크립트로 시도해 보았습니다:
$ v=123test
$ echo $v
123test
$ echo "$v"
123test
그런 다음 어색하게 시도했습니다:
$ awk 'BEGIN{print "'$v'"}'
$ 123test
$ awk 'BEGIN{print '"$v"'}'
$ 123
왜 차이가 있을까요?
마지막으로 이것을 시도해 보았습니다:
$ awk 'BEGIN{print " '$v' "}'
$ 123test
$ awk 'BEGIN{print ' "$v" '}'
awk: cmd. line:1: BEGIN{print
awk: cmd. line:1: ^ unexpected newline or end of string
혼란스럽습니다.
258
7
v` 사용(가장 좋은 방법, 가장 휴대성이 좋음)
v
옵션 사용: (참고로
-v뒤에 공백을 사용하지 않으면 이식성이 떨어집니다. 예:
awk -v var=가 아닌
awk -vvar=`)이것은 대부분의
awk
와 호환되어야 하며,BEGIN
블록에서도 변수를 사용할 수 있습니다:변수가 여러 개 있는 경우:
경고. 에드 모튼이 쓴 것처럼, 이스케이프 시퀀스는
\t
가\t
가 아닌 실제탭
이 되도록 해석됩니다. ENVIRON[]을 사용하여 해결하거나
ARGV[]`를 통해 액세스할 수 있습니다.PS 세 개의 세로 막대를 구분 기호
|||
로 사용할 경우 이스케이프할 수 없으므로 `-F"[|][|][|][|]"를 사용하세요.프로그램/함수에서
awk
로 데이터를 가져오는 예제(여기서는 날짜가 사용됨)코드 블록 뒤에 변수
여기서는
awk
코드 뒤에 변수를 가져옵니다. 이 방법은BEGIN
블록에 변수가 필요하지 않은 한 잘 작동합니다:이 방법은 여러 변수가 있는 경우에도 작동합니다.
awk '{print a,b,$0}' a="$var1" b="$var2" file
이런 식으로 변수를 사용하면
BEGIN
블록에서 작동하지 않습니다:여기 문자열
변수를 지원하는 셸(Bash 포함)에서 [here-string][1]을 사용하여
awk
에 변수를 추가할 수도 있습니다:좋은 세 것으로 보인다 '환경' [태그: awk] 내장현 해시라고 전혀 언급하지 않고 있다. 예를 들어 사용.
셸 변수에서 백슬래시를 처리하는 방법에 따라 이 중 하나를 사용합니다(
avar
는 어색한 변수,svar
는 셸 변수):자세한 내용 및 기타 옵션은 http://cfajohnson.com/shell/cus-faq-2.html#Q24 을 참조하세요. 위의 첫 번째 방법은 거의 항상 최선의 선택이며 가장 명확한 의미를 갖습니다.
명령줄 옵션]1
-v
에 변수 이름(v
)과 환경 변수 값(=
)을 함께 전달할 수 있습니다("${v}"
):또는
v
를 훨씬 적게 사용하여 더 명확하게 만들 수도 있습니다:Argv 활용할 수 있습니다.
단, 앞으로 이어질 경우 몸에 조정하십시오 합니다 아리스:
난 이미 데이트였어 삽입하려면 로그 파일의 맨 앞에 선 및 it& # 39 의 수행되 그것을비유하사 다음과 같습니다.
다른 파일 리디렉션합니다 저장할 수 있습니다.
그냥 변경일 @Jotne& # 39 에 대한 해답 loop" ";).