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