在 "for file in $1/*" 中,"$1/*" 的意思是什么?

6
下面是一个简短的 bash 脚本,用于列出给定目录及其子目录中的所有文件和目录。在脚本中,$1/* 意味着参数 $1 代表要遍历的目录,/* 表示匹配目录下的所有文件和子目录。以下是一些参考资料。谢谢。

该脚本可用于列出文件和目录的命令是:
ls -R $1/*
#!/bin/sh

list_alldir(){
    for file in $1/*
    do
        if [ -d $file ]; then
            echo $file
            list_alldir $file
        else
            echo $file
        fi
    done
}   

if [ $# -gt 0 ]; then 
    list_alldir "$1"
else
    list_alldir "."
fi
3个回答

19

这是将第一个参数视为目录的全局变量。

在bash脚本中,文件的参数以$0(即脚本名称), $1$2$3 ...的形式传递到脚本中。要访问它们所有,您可以使用它们的标签或者使用其中的组结构。对于组结构,有$*$@。($*将所有参数视为一个块,而$@则将它们用$IFS分隔)


4

$1 表示第一个参数。
for file in $1/* 意味着循环变量 file 的值为第一个参数指定的目录中每个文件的名称。


3

$1是命令行参数的第一个。如果你运行./asdf.sh a b c d e,那么$1将是a,$2将是b等等。在带有函数的shell中,$1可能作为第一个函数参数等等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接