다음과 같은 파일이 있습니다.
(blank line)
[Test1]
a=1
b=2
c=3
a
변수 의 값을 읽어야 했기 b
때문에 명령을 사용했더니 제대로 작동했습니다. 그러나 2번째 줄에서는 명령을 찾을 수 없다는 메시지가 나타납니다.c
source
[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.