Bash:使用if语句循环

时间:2016-10-24 11:47:13

标签: string bash loops if-statement

在我的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

1 个答案:

答案 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将展开*以输出当前目录中所有匹配的文件/目录。