리눅스는 오류가 없습니다

리눅스는 오류가 없습니다

에코 "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

관련 정보