次の配列を解析するスクリプトがあります。
#!/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