在下面的代码中,
#!/bin/bash
sDir=/a/b/c
dDir=/d/e/f
rDir="$dDir/recent"
shopt -s nullglob
:
rm $rDir/$deviceName*
:
问题行 rm $rDir/$deviceName*
显示缺少操作数而没有 echo 命令
rm: missing operand
Try 'rm --help' for more information.
如何解决这个错误?
答案1
因为你有shopt -s nullglob
,所以该命令rm $rDir/$deviceName*
会扩展到rm
当 glob 模式不匹配任何内容时。
事实上,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*
对两个变量都未设置或为空,则参数将变为/*
,意味着所有文件都直接位于根目录中。