考虑这个简单的脚本:
#!/bin/bash
DIR="$1"
for f in "$DIR"; do
if [[ "$f" == "*.txt" ]];
then
echo "Filename is $f"
fi
done
我想只返回扩展名为.txt的文件。使用以下命令调用脚本:
./script1 /home/admin/Documents
什么都不返回。没有错误,只是空白。有什么问题?
答案 0 :(得分:8)
我假设你希望遍历你传递的目录中的所有文件。为此,您需要更改循环:
for file in "$1"/*
值得一提的是for
没有任何内置行为来枚举目录中的项目,它只是迭代你传递它的单词列表。由shell扩展的*
导致循环遍历文件列表。
您的情况也需要修改,因为*
需要在引号之外(其余部分也不需要在其中):
if [[ $f = *.txt ]]
但是你可以通过直接循环遍历以.txt
结尾的所有文件来避免对条件的需要:
for file in "$1"/*.txt
你可能还想考虑没有匹配的情况,在这种情况下我猜你期望循环不运行。在bash中这样做的一种方法是:
# failing glob expands to nothing, rather than itself
shopt -s nullglob
for file in "$1"/*.txt
# ...
done
# unset this behaviour if you don't want it in the rest of the script
shopt -u nullglob