Bash create while循环删除目录中的所有文件

Bash create while循环删除目录中的所有文件,bash,Bash,尝试创建while循环以从指定的测试文件夹中删除8个文件。我不断收到错误没有这样的文件或目录,即使我肯定我在正确的文件夹中,因为我可以使用ls命令查看文件。。。不管怎样,这就是我所拥有的 #!/bin/bash var=(`ls ~/Random/Unit1/Test`) x=${#var[@]} i=0 while [ $i -lt $x ] ; do rm $var # this line is incorrect and needs chan

尝试创建while循环以从指定的测试文件夹中删除8个文件。我不断收到错误
没有这样的文件或目录
,即使我肯定我在正确的文件夹中,因为我可以使用
ls
命令查看文件。。。不管怎样,这就是我所拥有的

#!/bin/bash

var=(`ls ~/Random/Unit1/Test`)
x=${#var[@]}
i=0

while [ $i -lt $x ] ; do
    rm $var                   # this line is incorrect and needs changing
    ((i++))
done

var是一个数组变量,现在您以标量的形式访问它,在bash中,它返回第一个值,因此您删除第一个文件,然后对目录中的每个文件再次尝试删除它。如果要删除每个文件,则需要在每个索引处获取数组的值,因此在循环中可以获取数组中的第n个值,即

rm ${var[$i]}

您的脚本有几个问题,第一个问题是您应该
cd
到要从中删除文件的文件夹,您可以使用
pushd
popd
。其次,应该用双引号将
var
变量括起来。此外,如中所述,在访问数组时,必须对其使用数组表示法

#!/bin/bash

DIRECTORY=~/Random/Unit1/Test
var=(`ls $DIRECTORY`)
x=${#var[@]}
i=0

# Saves current directory and change it to the one pointed by "$DIRECTORY"
push "$DIRECTORY" 

while [ $i -lt $x ] ; do
    rm "${var[$i]}"
    ((i++))
done

# Restores the previously saved directory
popd

将引号添加到
$var
rm“$var”
仍无法正常工作。。。我得到一个错误
rm:cannotremove
file1':没有这样的文件或目录`关于
rm-f~/Random/Unit1/Test/*.
?你必须更改
rm
的当前目录才能工作,请参阅下面我的答案以获得一种方法为什么不使用
find~/Random/Unit1/Test type-f-exec rm-f{}
或更简单的
rm-f
根据@DarshanPatel的评论?现在我得到错误
rm:无法删除文件1:没有这样的文件或目录
,但它从文件1到文件8。。。很接近