String Bash:if语句循环

String Bash:if语句循环,string,bash,loops,if-statement,String,Bash,Loops,If Statement,在我的bash脚本中,我有一个目录中文件的循环和一个简单的if语句来过滤特定文件。然而,它的行为并不像我预期的那样,但我不明白为什么 (我知道我可以筛选for循环表达式中已经存在的文件扩展名(…在“*.txt”),但在我的实际情况中,情况更复杂。) 这是我的代码: #!/bin/bash for f in "*" do echo $f if [[ $f == *"txt" ]] then echo "yes" else echo "

在我的bash脚本中,我有一个目录中文件的循环和一个简单的if语句来过滤特定文件。然而,它的行为并不像我预期的那样,但我不明白为什么

(我知道我可以筛选for循环表达式中已经存在的文件扩展名(
…在“*.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

脚本中错误引用的问题。在
glob
的顶部有一个额外的引号,而在
echo
中缺少一个引号

这样做:

for f in *
do
    echo "$f"
    if [[ $f == *"txt" ]]
    then
        echo "yes"
    else
        echo "no"
    fi
done
  • “*”中f的
    将只循环一次
    f
    作为文本
    *
  • 不带引号的
    echo$f
    将展开
    *
    ,以输出当前目录中所有匹配的文件/目录