我有一个脚本,它将解析一个数组,如下所示:
#!/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