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

관련 정보