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目標がダウンロードURLの場合は、直接入力してください。

wget -i config
aria2c -i config

関連情報