bash에서 이름이 두 개의 변수로 구성된 변수를 내보내는 방법은 무엇입니까?

bash에서 이름이 두 개의 변수로 구성된 변수를 내보내는 방법은 무엇입니까?

for 루프 내에서 변수를 내보내려고 하는데 루프를 반복할 때마다 작성되는 변수가 변경되기를 원합니다. 나는 bash로 내보내기를 만족시키기 위한 올바른 구문을 찾고 있었지만, 내가 시도한 어떤 것도 성공하지 못했습니다. 이를 수행하는 올바른 방법은 무엇입니까?

더 자세한 내용을 추가하려면 루프가 실행될 때 첫 번째 실행에서는 FVAR0, 두 번째 실행에서는 FVAR1, 세 번째 실행에서는 FVAR2 등을 내보내도록 하고 싶습니다.

원래는 노력했어export FVAR$i

export "${!FVAR[$i]}"이것이 나의 최근 추측이다.

#!/bin/bash
set -x
for i in 0 1 2 3 4
do
    export "${!FVAR[$i]}"=$(ls ./run/$i)
done


10:36:10 Thu Jan 24 ::  ./uploader.sh
+ for i in 0 1 2 3 4
++ ls ./run/0
+ export =
./uploader.sh: line 5: export: `=': not a valid identifier
+ for i in 0 1 2 3 4
++ ls ./run/1
+ export =
./uploader.sh: line 5: export: `=': not a valid identifier
+ for i in 0 1 2 3 4
++ ls ./run/2
+ export =
./uploader.sh: line 5: export: `=': not a valid identifier
+ for i in 0 1 2 3 4
++ ls ./run/3
+ export =
./uploader.sh: line 5: export: `=': not a valid identifier
+ for i in 0 1 2 3 4
++ ls ./run/4
+ export =
./uploader.sh: line 5: export: `=': not a valid identifier

답변1

이것은 작동합니다:

#!/bin/bash

for x in 0 1 2 3; do
    export FVAR$x="Is's $x"
done

env | grep FVAR

구현하다:

$ ./fvar.sh 
FVAR3=Is's 3
FVAR2=Is's 2
FVAR1=Is's 1
FVAR0=Is's 0

답변2

export "${!FVAR[$i]}"=...

FVAR이는 배열을 가정 하고 $i해당 인덱스의 요소를 변수 이름으로 사용하여 해당 명령줄에서 확장을 시도합니다. (즉, is , is 이기 때문에 a=11; b=22; c=33; p=(a b c); echo ${!p[1]}인쇄됩니다 .)22p[1]b$b22

FVAR[0]등은 이 스크립트에 변수 이름을 저장하지 않으므로 확장하면 빈 문자열이 생성됩니다.

당신은 사용할 수 있어야합니다

for i in 1 2 3 4 5; do
    export "FVAR$i=$(generate some value from $i)"
done

export확장된 변수 이름을 처리합니다 . 다만, 정기배분의 경우에는 그러하지 아니하다. FVAR$i=$(...)작동하지 않습니다.


물론, 무엇을 하느냐에 따라 모든 값을 변수에 넣은 후 내보내는 등 다른 방법도 있을 수 있습니다.

FVARS="$(generate some value from 1)"
for i in 2 3 4 5 ; do
    FVARS+=":$(generate some value from $i)"
done
export FVARS

이를 위해서는 구분 기호로 사용할 일부 문자를 예약하고 구분 기호를 올바른 위치에 배치하도록 정렬해야 하지만...

관련 정보