Bash脚本无法运行(参数太多)


#!/bin/bash    
if [ -e *.txt ]                                                                                                         then
rm *.txt
echo "removing previous files"
else
echo "files already deleted"
fi

我正在尝试删除当前目录中的所有txt文件,如果我有一个以上的txt文件,我会出错。不太确定发生了什么。

如果你有两个文件1.txt和2.txt,你的代码基本上会导致:

if [ -e 1.txt 2.txt ]
…

这只会引发语法错误,因为-e需要一个单独的参数。

您可以依赖一些CLI工具,如find,但也许您一开始就不需要if

也就是说:

rm -f *.txt

为了避免在没有*.txt文件的情况下失败,

否则:

rm -f -v *.txt

如果您还想获取一些已删除文件的日志。

保留if ... fi逻辑,这里不需要-e测试。Unix实用程序本身被设计为返回退出代码,在这种情况下,测试rm本身的结果更简单:

if rm *.txt 2> /dev/null
then
echo "removing previous files"
else
echo "files already deleted"
fi

但是,即使不需要,也要注意,可以进行单独的测试来这样工作:

if [ "$(ls *.txt)" ]

或者在纯bash中(不需要像ls这样的外部util(,如果我们临时设置nullglob选项:

if (shopt -s nullglob; [ "$(echo *.txt)" ])

最新更新