为什么我不能将目录作为参数传递给bash中的for循环?

Sam*_*IAm 9 directory bash

我有一个简单的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中保存所有文件/目录的价值!

  • 这应该是“$@”,所以它甚至适用于名称中带有空格的文件。 (2认同)