Bash-用于“中的文件”$@&“;;做

Bash-用于“中的文件”$@&“;;做,bash,for-loop,Bash,For Loop,我有一个包含以下代码的几个块的脚本: for files in "$@"; do echo "${files}" #command done 脚本开头的一些命令会在文件夹中创建新文件。我注意到,“$@”中的文件的;do忽略文件夹中的新文件。 因此,如果我运行myscript.sh文件1文件2文件3其中myscript.sh以以下开头: for files in "$@"; do echo "${files}" #command reads file1 file2 file3 and creat

我有一个包含以下代码的几个块的脚本:

for files in "$@"; do
echo "${files}"
#command
done
脚本开头的一些命令会在文件夹中创建新文件。我注意到,“$@”中的文件的
;do
忽略文件夹中的新文件。 因此,如果我运行
myscript.sh文件1文件2文件3
其中
myscript.sh
以以下开头:

for files in "$@"; do
echo "${files}"
#command reads file1 file2 file3 and creates file4 file5 file6
done
还有一段代码:

for files in "$@"; do
echo "${files}"
#another command
done
“$@”中文件的第二次出现
;do
仍将读取原始的
file1 file2 file3
并忽略新创建的
file4 file5 file6

我想知道是否总是这样。很抱歉,我无法在手册页中找到任何相关信息,因此请某人确认。

“$@”
提供传递给脚本的命令行参数列表。它与文件名列表或当前目录中的文件没有特定的连接。这只是命令行中的参数

如果要循环当前目录中的文件,可以编写:

for file in *
或者对于位于不同目录中的:

for file in /some/other/dir/*

“$@”
将所有的命令艺术作为一个标记,尽管带有嵌入空格。您的
for file…
循环只迭代了一次。查看
set-vx
告诉您的内容。

$@
扩展到命令行中指定的参数列表。您可能希望对*中的文件使用
;基本上,如果我使用myscript.sh file1 file2 file3运行我的scipt,$@是$1(file1),$2(file2)和$3(file3)m正确吗?如果我使用myscript.sh/path/to/folder/containing/files运行脚本如何?在运行脚本的过程中,$1$2$3等的数量是否会发生变化?
myscript.sh/path/to/folder/containing/files
只会将
$1
设置为“/path/to/folder/containing/files”
myscript.sh/path/to/folder/containing/files/*
将传递该目录中的文件列表。但是列表不会更新——参数列表是字符串列表,而不是某种动态更新模式。这是不正确的,它将每个参数视为单独的标记。从:'@。。。展开到位置参数,从一开始。当展开发生在双引号内时,每个参数展开为一个单独的字。也就是说,“$@”相当于“$1”$2”……谢谢你抓住了我的坏消息。