Bash:将带有数组的文件源到主脚本中

Bash:将带有数组的文件源到主脚本中

我有一个脚本,它将解析一个数组,如下所示:

#!/bin/bash
URLs=(
...
"https://www.example.com"
"https://www.example.com/contact"
);
for URL in ${URLs[*]} ; ...

现在我想做的是将数组外包URLs到另一个文件中,将该文件传递为$1并将其来源 ( source $1) 到我的脚本中。不幸的是URLs仍然空着。

这是带有外包 URL 数组的文件,我正在尝试传递该数组:

#!/bin/bash
URLs=(
...
"https://www.example.com"
"https://www.example.com/contact"
);

我这样调用脚本:

./original.sh /absolute/path/to/array.sh

当然还有original.sh

#!/bin/bash
source $1;
for URL in ${URLs[*]} ; ...
# e.g. curl ${URL}
# Tried also:
for URL in ${URLs[@]} ; ...

我的想法是,我有不同的带有 URL 的列表/文件,需要将其传递给一个脚本才能进行解析。有谁知道我该怎么做?

答案1

我在您的脚本中没有看到任何问题,它对我有用,尽管您应该始终使用引号表示"${var[@]}"法,并且在变量/文件名周围使用引号(source "$1")。


这效果很好:

脚本array.sh

#!/bin/bash
URLs=(
"example"
"something"
"something else"
)

脚本original.sh

#!/bin/bash
source "$1"
for URL in "${URLs[@]}"; do
    echo "$URL"
done

对我来说效果很好:

$ ./original.sh array.sh
example
something
something else

加载列表数据的更简单解决方案,无需使用readarray

配置:

example
something
something else

脚本:

readarray URLs < config
for URL in "${URLs[@]}"; do
    echo "$URL"
done

或使用xargs

 xargs -a config -I{} echo {}

wget或者aria2c如果您的目标是下载网址,则将其直接输入:

wget -i config
aria2c -i config

相关内容