Linux 在bash中循环遍历参数

Linux 在bash中循环遍历参数,linux,bash,shell,while-loop,parameters,Linux,Bash,Shell,While Loop,Parameters,我正在编写一个脚本,它接受一些文件作为参数,并为每个文件输出一条消息: 文件名的大小为大小KB 我正在努力研究如何在while循环中引用参数 这是我的密码 i=1 while [ $i -le $# ] do echo "The size of $(du -s $1 | cut -f2) is $(du -s $1 | cut -f1) kilobytes" i=$((i+1)) done 只需迭代值,而不是索引。注意,这是所有POSIX标准shell for i in "$@"; do

我正在编写一个脚本,它接受一些文件作为参数,并为每个文件输出一条消息:

文件名的大小为大小KB

我正在努力研究如何在while循环中引用参数

这是我的密码

i=1
while [ $i -le $# ]
do
echo "The size of $(du -s $1 | cut -f2) is $(du -s $1 | cut -f1) kilobytes"
i=$((i+1))
done

只需迭代值,而不是索引。注意,这是所有POSIX标准shell

for i in "$@"; do
    # Run du once, no need for cut
    read -r size dir <<EOF
$(du -s "$i")
EOF
    echo "The size of $dir is $size kilobytes"
done

迭代所有参数的标准方法是
for i do
for i;do
也为我所知的所有shell所接受。)不,如果省略要迭代的显式序列,这是一条捷径。它工作得很好,但我无法理解EOF doIt是一个任意字符串,用于标记here文档的结尾。以下每一行都用作
read
命令的标准输入,直到找到一行只有
EOF
。只要使用匹配的字符串对,您几乎可以使用任何字符串来代替
EOF
read -r size dir <<< "$(du -s "$i")"