我有一个简单的bash脚本simple.sh,如下所示:
#/usr/local/bin/bash
for i in $1
do
echo The current file is $i
done
Run Code Online (Sandbox Code Playgroud)
当我使用以下参数运行它时:
./simple.sh /home/test/*
Run Code Online (Sandbox Code Playgroud)
它只会打印并列出目录中的第一个文件.
但是,如果我将simple.sh更改为:
#/usr/local/bin/bash
DIR=/home/test/*
for i in $DIR
do
echo The current file is $i
done
Run Code Online (Sandbox Code Playgroud)
它会正确地打印出目录中的文件.有人可以帮助解释为什么传递的参数没有显示相同的结果?
Oni*_*ni1 10
如果你拿"$ 1",它是第一个文件/目录,这是可能的!你应该这样做:
for i in "$@"
do
echo The current file is ${i}
done
Run Code Online (Sandbox Code Playgroud)
如果你执行它:
./simple.sh *
Run Code Online (Sandbox Code Playgroud)
他们列出了实际字典的所有文件
"$ 1"按字母顺序排列当前目录的第一个文件/目录,而在for循环中,"i"的值将是例如a1.sh,然后它们将退出for循环!如果你这样做:
DIR=/home/<s.th.>/*
Run Code Online (Sandbox Code Playgroud)
你在DIR中保存所有文件/目录的价值!