이것이 작동하는 이유:
$ 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+, 즉기본 bash
macOS에서는 다음을 통해 설치됩니다.스스로 만든),
printf '%(%a)T\n' -1
외부 명령을 호출하지 않고도 동일한 작업을 수행합니다.