쉘은 '?' 문자를 먹는다

쉘은 '?' 문자를 먹는다

이것은 매우 간단한 질문이며 누군가가 어딘가에 질문한 것 같지만 찾을 수 없습니다. 의도적으로 이 작업을 수행하도록 설정되지 않은 내 쉘은 물음표가 포함된 모든 단어를 먹는 것 같습니다.

$ bash --version
GNU bash, version 4.3.42(1)-release (x86_64-apple-darwin13.4.0)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

$ echo a ? = =?
a =

$ not-a-command? echo a
a

$ (?) echo a
a

중요한 내용이라면 참고해주세요어느물음표가 포함된 단어는 완전히 조용히 사라지는 것처럼 보였기 때문에 그녀의 쉘은 물음표가 시작 부분에 없었음에도 불구하고 유효한 실행 파일을 지정하지 않은 단어로 호출이 시작되었다는 사실조차 알아차리지 못했습니다.

답변1

쉘 옵션을 활성화했을 수 있습니다 . nullglob그러면 와일드카드 문자가 포함된 *모든 단어가 삭제됩니다. ?따라서 단일 문자 이름을 가진 파일, 폴더 등이 포함되지 않은 폴더에 있는 경우 ?아무 것도 확장되지 않고 다시 삭제되며 not-a-command?어떤 것과도 일치하지 않고 대신 삭제됩니다. .

이것이 사실인지 확인하려면 다음을 실행하십시오.

shopt nullglob

이 옵션을 비활성화하려면 다음을 실행하세요.

shopt -u nullglob

답변2

와 비슷 *하지만 단일 문자를 나타냅니다.

예를 들어, 세 문자로 구성된 루트 디렉터리를 표시합니다.

$ ls -d /???
/bin  /dev  /etc  /lib  /mnt  /opt  /run  /sys  /tmp  /usr  /var

/home일치하지 않아 표시되지 않는 참고사항

[?]또는 또는를 사용하여 \?문자열을 따옴표( "foo?"또는 'bar?') 로 묶습니다.

관련 정보