在我的bash脚本中,我对目录中的文件进行了循环,并使用简单的if语句来过滤特定文件。但是,它并不像我期望的那样,但我不明白为什么。
(我知道我可以过滤for循环表达式中的文件扩展名(... in "*.txt"
),但在我的实际情况中条件更复杂。)
这是我的代码:
#!/bin/bash
for f in "*"
do
echo $f
if [[ $f == *"txt" ]]
then
echo "yes"
else
echo "no"
fi
done
我得到的输出:
1001.txt 1002.txt 1003.txt files.csv
no
我期待的是什么:
1001.txt
yes
1002.txt
yes
1003.txt
yes
files.csv
no
答案 0 :(得分:1)
脚本中的错误引用问题。您在glob
的顶部有一个额外的引号,但在echo
中缺少引号。
这样做:
for f in *
do
echo "$f"
if [[ $f == *"txt" ]]
then
echo "yes"
else
echo "no"
fi
done
for f in "*"
仅使用f
作为文字*
echo $f
将展开*
以输出当前目录中所有匹配的文件/目录。