아래 코드에서는
#!/bin/bash
sDir=/a/b/c
dDir=/d/e/f
rDir="$dDir/recent"
shopt -s nullglob
:
rm $rDir/$deviceName*
:
문제 행에 rm $rDir/$deviceName*
피연산자가 누락되고 에코 명령이 표시되지 않음
rm: missing operand
Try 'rm --help' for more information.
이 오류를 해결하는 방법은 무엇입니까?
답변1
가 있기 때문에 glob 패턴이 아무것도 일치하지 않을 때 shopt -s nullglob
명령이 rm $rDir/$deviceName*
확장됩니다 .rm
실제로 rm
매개변수 없이 호출하면 다음 메시지가 표시됩니다.
$ rm
rm: missing operand
Try `rm --help' for more information.
다음 두 가지를 비교하십시오.
$ rm nonexistent*
rm: cannot remove `nonexistent*': No such file or directory
$ (shopt -s nullglob; rm nonexistent*)
rm: missing operand
Try `rm --help' for more information.
누락된 인수로 인해 발생하는 오류를 제거하는 간단하지만 안전하지 않은 방법은 rm
인수를 호출하는 것입니다 rm -f
.
다음과 같은 상황이 발생하지 않도록 하는 것이 좋습니다 rm
. 설정되지 않은 변수로 구성된 인수를 사용하여 먼저 호출하면 set -o nounset
설정되지 않은 변수를 사용하는 것은 금지됩니다(그러나 빈 문자열로 설정된 변수에는 아무 작업도 수행하지 않습니다). 두 변수를 모두 설정 하지 rm $x/$y*
않거나 비워두면 매개변수는 가 됩니다. /*
즉, 모든 파일이 루트 디렉터리에 직접 있게 됩니다.