-c를 통해 bash에 전달하면 스크립트가 작동하지 않습니다.

-c를 통해 bash에 전달하면 스크립트가 작동하지 않습니다.

이것이 작동하는 이유:

$ cat test.sh
#!/bin/bash
cat <(date|awk '{print $1}')

$ ./test.sh
Thu

그러나 bash에 전달된 명령은 아닙니다.

$ bash -c "cat <(date|awk '{print $1}')"
Thu  2 Apr 2020 12:52:10 BST

저는 이것을 macOS에서 실행하고 있습니다

$ bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin19)
Copyright (C) 2007 Free Software Foundation, Inc.

답변1

한 줄의 코드에서 $1큰따옴표로 묶인 문자열 안에 다음을 입력합니다.

"cat <(date|awk '{print $1}')"

이는 대화형 셸을 통해 확장된다는 의미입니다. 첫 번째 위치 인수가 $1비어 있으면 이를 빈 문자열로 확장하여 awk프로그램이 입력 내용만 인쇄하게 합니다.

awk '{print }'

쉘이 확장을 시도하는 것을 방지하기 위해 탈출하십시오 $. 완전한 명령은 다음과 같습니다$1\$1

bash -c "cat <(date|awk '{print \$1}')"

스크립트 변형에서 $1작은따옴표로 묶인 문자열 내부. 따라서 쉘은 이를 확장하려고 시도하지 않습니다.

하지만 이 특별한 경우에는 그냥 사용하는 것이 좋습니다.

date +%a

요일의 약칭을 인쇄합니다. strftime(3)설명서( ) 도 참조하세요 man 3 strftime.

최신 bash버전(distro 4.2+, 즉기본 bashmacOS에서는 다음을 통해 설치됩니다.스스로 만든),

printf '%(%a)T\n' -1

외부 명령을 호출하지 않고도 동일한 작업을 수행합니다.

관련 정보