이 명령의 출력을 이해하려고 노력 중입니다 echo ?
. 내가 보는 출력은 하나의 |
문자입니다.
답변1
?
쉘의 특수 와일드카드 문자이기 때문입니다 . $abc가 존재하지 않으므로 빈 문자열로 확장되고 ?
현재 디렉터리에 있는 단일 문자 파일이나 디렉터리로 대체됩니다. 따라서 |
현재 디렉터리에 이름이 지정된 파일/디렉토리가 있을 수 있습니다.
내 시스템에서는 출력이 다릅니다.
$ echo $abc?
_ 1
단일 문자 파일/디렉토리가 없으면 파일/디렉토리가 ?
확장되지 않습니다.
실제로 디렉토리 _
와 1
.
답변2
왜냐하면? ?
기본적으로 다음을 의미하는 전역 문자( ) 를 포함하는 단어로 분할됩니다 .
glob 과 일치하는 현재 디렉터리의 파일 이름 목록을 인쇄합니다
?
.
glob은 ?
단일 문자가 있는 모든 파일과 일치합니다. 따라서 이것은 작동합니다.
$ touch a \| b
$ echo ?
| a b
$ ls -l ?
-rw-r--r-- 1 user user 0 Dec 29 10:03 '|'
-rw-r--r-- 1 user user 0 Dec 29 10:03 a
-rw-r--r-- 1 user user 0 Dec 29 10:03 b
이는 문자가 포함된 파일/디렉토리가 존재하지 않는 경우 발생합니다.
$ rm a \| b
…
$ echo ?
?
이는 기본 설정을 사용한 bash의 출력입니다.
파일을 명확하게 보려면 다음을 수행하십시오.
$ ls -l ?
ls: cannot access '?': No such file or directory
활성화 하면 nullglob
출력이 인쇄되지 않습니다.
$ shopt -s nullglob
$ echo ?
$