(=)와 같은 줄을 포함하지 않는 파일의 소스 명령

(=)와 같은 줄을 포함하지 않는 파일의 소스 명령

다음과 같은 파일이 있습니다.

(blank line)
[Test1]
a=1
b=2
c=3

a변수 의 값을 읽어야 했기 b때문에 명령을 사용했더니 제대로 작동했습니다. 그러나 2번째 줄에서는 명령을 찾을 수 없다는 메시지가 나타납니다.csource[Test1]

[Test1]변수를 어떻게 받아들일 수 있나요 ?

기본적으로 나는 다음을 기대합니다.

$some_var=[Test1]
$a=1
$b=2
$c=3

그래서 이 값을 더 사용할 수 있습니다.

현재 내가 하고 있는 일은 파일에서 처음 두 줄을 삭제한 다음 삭제하는 것입니다. source file이렇게 하면 변수에 줄 2가 표시되지 않습니다. 더 좋은 방법을 찾고 있어요. 저는 이 모든 작업을 bash 스크립트로 수행하고 있습니다.

답변1

프로세스 교체가 있다고 가정하면 다음을 수행할 수 있습니다.

source <(sed 's/^\[/some_var=\[/' file)

답변2

파일이 크지 않은 경우(bash 4.4부터):

readarray -t arr <infile         # the value in zero is a blank line.
some_var="${arr[1]}"             # use the first line.
. <(printf '%s\n' "${arr[@]:2}") # source the rest.
echo "some_var=$some_var a=$a a=$b a=$c"

실행 시:

$ ./script
some_var=[Test1] a=1 a=2 a=3

이전 bash를 사용하면 솔루션이 더 복잡해지지만 가능합니다.
이는 2.04(2000-03-21) 이후 bash와 동일한 버전입니다.

unset arr; i=0
while IFS='' read -r a ; do arr[i]="$a"; ((i++));done <infile
some_var="${arr[1]}"                    # use the first line.
. <(printf '%s\n' "${arr[@]:2}")        # source the rest.

관련 정보