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]}
인쇄됩니다 .)22
p[1]
b
$b
22
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
이를 위해서는 구분 기호로 사용할 일부 문자를 예약하고 구분 기호를 올바른 위치에 배치하도록 정렬해야 하지만...