【发布时间】:2016-12-04 13:06:15
【问题描述】:
如果我输入rm *,我想让bash 运行rm -i *,否则运行常规rm。重要的是,我不想每次使用诸如rm part* 之类的通配符时都运行rm -i。这是我能想到的:
rm ()
{
if [ "$1" == "*" ]; then
rm -i *
else
rm $1
fi
}
但我知道这会失败。我知道我想要的比较是^*$,但是我不知道如何实现。
【问题讨论】:
-
当你的
rm函数被执行时,*已经被扩展了。 -
问题是
rm没有得到*作为参数;它获取 shell 将*扩展为参数的一长串文件。 -
GNU
rm有一个-I选项,仅在删除超过 3 个文件时才会提示您。 -
顺便说一句,
==实际上并不能保证在符合 POSIX 测试的[ ]内工作;参见pubs.opengroup.org/onlinepubs/9699919799/utilities/test.html,它指定=(只有一个字符)作为字符串比较运算符。现在,bash 通过使==作为选项可用来扩展标准,但是如果您想明确表示您依赖于 bash 扩展,最好改用[[ ]]。 -
是的,我需要处理我的 shell 脚本一致性。仍然是一个菜鸟/黑客。