이것이 작동하는 이유:
$ 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 }'
쉘이 확장을 시도하는 것을 막기 위해 in $
을 탈출하십시오 . 그러면 완전한 명령은 다음과 같습니다.$1
\$1
bash -c "cat <(date|awk '{print \$1}')"
스크립트 변형에서 는 $1
작은따옴표로 묶인 문자열입니다. 따라서 쉘은 이를 확장하려고 시도하지 않습니다.
하지만 이 특정한 경우에는 그냥 사용하는 것이 좋습니다.
date +%a
요일의 약칭을 인쇄합니다. strftime(3)
설명서( ) 도 참조하세요 man 3 strftime
.
최신 bash
버전(릴리스 4.2+, 즉기본 bash
macOS에서는 예를 들어 설치된 것이 있습니다.홈브류),
printf '%(%a)T\n' -1
외부 명령을 호출하지 않고도 동일한 작업을 수행합니다.