printf
와일드 카드를 사용할 때 명령이 따르는 동작이 궁금합니다 . 이 질문은 원래 다른 사람이 저에게 요청했지만, 저 자신의 행동에 혼란스럽고 printf
명령 이 어떻게 작동 하는지 이해하는 데 도움이되는 설명을 좋아 합니다.
다음 디렉토리가 제공됩니다.
$ ls -a
.a a.b ab.c b .b b.a b.c c c.d d d.e e
$ printf [abcd]*[abcd]
출력 a.b
됩니다. $ ls [abcd]*[abcd]
준다
a.b:
ab.c:
b.a:
b.c:
c.d:
출력으로, $ echo [abcd]*[abcd]
결과a.b ab.c b.a b.c c.d
printf의 출력이 다른 이유는 무엇입니까? 정규식 / 쉘 확장 우선 순위와 관련이 있습니까?
set -x
쉘이 확장 한 후 명령이 실제로 무엇인지 확인하는 데 사용 합니다. 그것은 밝혀
printf [abcd]*[abcd]
귀하의 디렉토리에 실제로
printf a.b ab.c b.a b.c c.d
이제 FORMAT으로 printf
처리 a.b
됩니다 (참조 man 1 printf
). 그것은 포함 %s
하거나 그와 같은 것을 포함하지 않으므로 나머지 인수는 중요하지 않고 문자 그대로 a.b
인쇄됩니다.
당신이 원하는 경우 printf
더 같은 행동 echo
, 당신은 원하는 형식, 예를 지정해야합니다 :
printf '%s\n' [abcd]*[abcd]
인쇄됩니다
a.b ab.c b.a b.c c.d
(참고 : 테스트를 마친 후 set +x
되돌리려면 사용 set -x
하십시오.)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다