리눅스에는 오류가 없습니다

리눅스에는 오류가 없습니다

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

관련 정보