답변:
배쉬 (또는 당신이 무엇을 쉘로 사용)은 모든 입력을 읽을 수있는 제일 먼저, 그리고 같은 특수 문자를 해석 시작 ?
하고 *
. CWD*
에서 일치하는 항목으로 확장 되므로 별표가 해당 일치 항목으로 대체됩니다.
대부분의 경우, 이것은 상당히 진보적이지만 때때로 혼란스러운 사례가 발생할 수 있습니다.
다음을 고려하세요. 디렉토리에는 다음 내용이 있습니다.
당신이 입력하면 mv *
뭔가 겉보기 이상한 일이 발생합니다 : test3
거기에 있지만 나머지는 사라졌습니다. 처음에는 이상하지만 bash가 실제로 무엇을 전달하는지 이해하면 의미가 있습니다 mv
. 별표로 인해 bash는 mv *
로 해석 되며 mv test test1 test2 test3
mv가 해당 목록을 가져 오면 마지막 인수는 모든 파일이 이동 된 대상이라고 가정합니다.
나열된 명령은 다음과 같습니다.
echo *
가난한 사람으로 기능 할 수 있습니다 ls
. 쉘은 별표를 해당 디렉토리에있는 모든 것으로 확장하고 이미 알고 있듯이 echo
말 그대로 bash가 전달한 모든 것을 말 그대로 에코로 표시합니다.cp temp temp*
mv
temp라는 디렉토리가 하나만 있지 않으면 위에서 설명한 명령 과 약간 다르게 작동합니다 .이 경우 소스와 대상 이름이 동일합니다. 즉, 아무 것도하지 않습니다.*
대신 에 사용 하는 것에 대해 "가난한"것은 없습니다 ls
. 예를 들어, for f in *; do
이다 더 이상 신뢰할 수있는 for f in $(ls)
파일 이름이 공백 또는 글로브의 문자가 포함 된 경우. 그러나 CWD에 파일이 없으면 실패하므로 해당 사례를 확인해야합니다.
shopt nullglob
.
이미 언급했듯이, 쉘은 확장 *
되어 echo
쉘이 현재 디렉토리에서 찾은 것을 인수로받습니다. 그러나 확장으로 인해 아무 것도 발생하지 않는 경우, 즉 디렉토리에 숨겨지지 않은 파일이없는 경우에는 *
그대로 유지됩니다 (비표준 옵션이와 같은 일부 쉘에 사용되지 않는 한)라는 명령에 그대로 전달됩니다 bash
. 전자는 아무것도 인쇄하지 않지만 후자는 인쇄하기 echo *
때문에 가난한 사람처럼 행동하지 않습니다 .ls
*
마찬가지로 이름이로 시작하는 파일이 하나 이상없는 경우 현재 디렉토리에 cp /tmp/temp temp*
이름이 지정된 파일을 만듭니다 .temp*
temp
마지막으로 *
어떤 경우에도 변경 사항을 전달하지 않으려면 작은 따옴표 '*'
, 큰 따옴표 "*"
또는 백 슬래시를 사용하여 확장되지 않도록 보호 할 수 있습니다 \*
.
Bash에서는 쉘이이를 처리합니다. 당신도 시도한다면*
반향없이 도
참고-주석에 따라 * ENTER를 실행할 때 디렉토리를 만들고 touch 명령을 사용하여 파일을 만들고 파일을 만들지 않고 적어도 첫 번째 파일이 알파벳순인지 확인하십시오. 경로에있는 스크립트 또는 명령
$ *
bash: a: command not found
$ echo *
a a.aa a.ab a.b a.htm a.tx
그래서 ls *
진부의 비트가
Windows에서는 *
명령으로 처리되므로dir *.*
진부하지 않습니다.
참고-일부 의견을 보면 *를 실행 한 다음 ENTER를 실행할 위험이 있습니다. 디렉토리 목록에서 첫 번째 인 rm이라는 파일이 있으면 그 이후의 파일이 삭제되므로 위험합니다. 또한 디렉토리 목록의 첫 번째 파일이 경로의 스크립트 이름 인 경우 파일이 실행되지 않습니다.
rm
물론 이라는 파일이있을 수 있습니다 .
-rf
? 나는 시도 touch -rf
하고 touch \-rf
있지만, 그것을 만들 수 없습니다.
-rf
. (나는 rm이라는 파일과 -rf라는 파일의 위험과 *를 입력하고 중요한 폴더에 enter를 넣는 문제를 이해하지 않을 것입니다.)
쉘은 인수가 명령에 전달 되기 전에 몇 가지 확장을 수행합니다 .
https://www.gnu.org/software/bash/manual/bashref.html#Simple-Command-Expansion 도 참조하십시오.
bash 특정이 아닌 경우 http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_01을 참조 하십시오.