Arrays bash,使用带有*的数组

Arrays bash,使用带有*的数组,arrays,bash,Arrays,Bash,我正在编写一个小脚本,加载一些iptables列表,并将每一行写入关联的链文件。 仅当脚本在空目录中运行时,这一切才起作用。 就我的理解而言,这是由于存储了*值的数组造成的。只要调用带有*的行,该值就会替换为当前目录中的所有文件 你们知道在非空文件夹中运行脚本的简单解决方案吗 下面是脚本在中运行时的输出示例~ LOG tcp -- Bilder Dokumente Downloads Musik Öffentlich Schreibtisch Videos Vorlagen eth1 !125.

我正在编写一个小脚本,加载一些iptables列表,并将每一行写入关联的链文件。 仅当脚本在空目录中运行时,这一切才起作用。 就我的理解而言,这是由于存储了*值的数组造成的。只要调用带有*的行,该值就会替换为当前目录中的所有文件

你们知道在非空文件夹中运行脚本的简单解决方案吗

下面是脚本在中运行时的输出示例~

LOG tcp -- Bilder Dokumente Downloads Musik Öffentlich Schreibtisch Videos Vorlagen eth1 !125.238.212.131 0.0.0.0/0 tcp dpt:45 LOG flags 0 level 4 prefix `LOGSMTP '
LOG tcp -- Bilder Dokumente Downloads Musik Öffentlich Schreibtisch Videos Vorlagen eth1 !125.238.212.131 0.0.0.0/0 tcp dpt:225 LOG flags 0 level 4 prefix `LOGSMTP '
下面是一个在空文件夹中运行的输出示例 应该是这样的

LOG tcp -- * eth1 !125.238.212.131 0.0.0.0/0 tcp dpt:45 LOG flags 0 level 4 prefix `LOGSMTP '
LOG tcp -- * eth1 !125.238.212.131 0.0.0.0/0 tcp dpt:225 LOG flags 0 level 4 prefix `LOGSMTP '
这是剧本

#!/bin/bash

cd /scripts/s.iptables.d/work
data=$(ls /scripts/s.iptables.d/iptables*)

for file in $data
do
        outputpath="/output/s.iptables-"
        while read -r line
        do
                arr=($line)
                case "$line" in
                        Chain* )        chain=${arr[1]}
                                        output=$outputpath$chain
                                        inactiveoutput=$outputpath$chain"-inactive"
                                        ;;
                        [1-9]* )        reg="^[0-9]*\s+0\s+0.*$"
                                        if [[ "$line" =~ "$reg" ]]
                                        then
                                        echo "${arr[@]:3}" >> $inactiveoutput
                                        else
                                        echo "${arr[@]:3}" >> $output
                                        fi
                                        ;;
                esac
        done < <(cat "$file")
done
我期待任何帮助并提前感谢您

不要解析ls->and

执行以下操作之一:

files=( /scripts/s.iptables.d/iptables* )
for file in "${files[@]}"
或者干脆

for file in /scripts/s.iptables.d/iptables*

还完成了done < "$file"