다음과 같은 배열을 구문 분석하는 스크립트가 있습니다.
#!/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