system() 명령을 통해 awk가 bash를 사용하도록 합니다.

system() 명령을 통해 awk가 bash를 사용하도록 합니다.

실행 시스템 명령을 호출할 때 awk가 sh 대신 bash를 사용하도록 하는 방법이 있습니까 system()?

[[ ]] 및 < > 문자열 비교 연산자와 같은 bash 관련 기능을 사용하고 싶습니다.

gawk 'BEGIN {system("if [[ \"porc\" == \"porc\" ]]; then echo yes; else echo no; fi")}'
sh: [[: not found

답변1

Bash를 원하면 gawk를 패치하거나 bash를 직접 호출해야 합니다(인용문이 약간 복잡합니다).

gawk 'BEGIN {
    script="if [[ \"porc\" == \"porc\" ]]; then echo yes; else echo no; fi"
    system("bash -c '\''" script "'\''")
}'

답변2

awk다음 작업을 직접 수행할 수 있습니다.

$ awk 'BEGIN { if ("A" < "B") print "A < B"; else print "A >= B" }'
A < B

정규식도 처리할 수 있습니다.

$ awk 'BEGIN { if ("thing" ~ "^t") print "t-something"; else print "not t-something" }'
t-something

또는 예를 들면 다음과 같습니다.

$ awk 'BEGIN { if ("porc" == "porc") print "yes"; else print "no" }'
yes

awk과거에는 외부 명령을 호출하는 것이 system()매우 느리고 불가능 했습니다 .산출프로그램 자체 내에서 사용 가능한 모든 형태의 명령 awk.

관련 정보