![리눅스는 오류가 없습니다](https://rvso.com/image/122432/%EB%A6%AC%EB%88%85%EC%8A%A4%EB%8A%94%20%EC%98%A4%EB%A5%98%EA%B0%80%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4.png)
에코 "aaa" >abc.1.txt 에코 "bbb" >abc.2.txt cp abc*
리눅스는 오류가 없습니다
버그 동일한 명령 [ cp abc.1.txt abc.2.txt]
cp abc.* = cp abc.1.txt abc.2.txt
왜?
답변1
이는 버그가 아니며 쉘 변수 표현에 대한 의도된 동작입니다.
ulrich-schwarz가 올바르게 언급했듯이 cp
명령이 실행되기 전에 변수 확장이 발생합니다. 표현식의 조건을 충족하는 두 개의 파일이 있으므로 abc*
전체 이름으로 확장됩니다.
실제로 세 번째 파일을 생성하면 abc.3.txt
세 파일을 cp
.
명령을 실행하기 전에 디버그( set -x
) 모드를 설정하면 이 모든 것을 확인할 수 있습니다. 이 모드는 확장이 발생한 후 실행되는 각 실제 명령을 보여줍니다. set +x
완료한 후에는 디버그 모드( )를 비활성화하는 것을 잊지 마십시오 .
$ echo "aaa" >abc.1.txt
$ echo "bbb" >abc.2.txt
$ ls
abc.1.txt abc.2.txt
$ set -x
$ cp abc*
+ cp abc.1.txt abc.2.txt
$ cat abc.2.*
+ cat abc.2.txt
aaa
$echo "ccc" > abc.3.txt
+ echo ccc
$ cp abc*
+ cp abc.1.txt abc.2.txt acb3.txt
cp: target «acb3.txt» is not a directory
$ cat abc.2.*
+ cat abc.2.txt
aaa
$ cat abc*
+ cat abc.1.txt abc.2.txt abc.3.txt
aaa
aaa
ccc
$ set +x
+ set +x