$value
그 안에 포함된 문자열을 여러 BASH 변수에 할당하고 싶습니다 .
사실 앞서 제시한 예( var1=var2=...=$value
)는 제가 원하는 것을 정확하게 반영하지 못합니다. 지금까지 이것을 찾았지만 $value
정수인 경우에만 작동합니다.
$ let varT=varz=var3=$value
어떻게 해야 하나요?
답변1
제 생각에는 좀 더 읽기 쉬운 작업을 수행하는 것이 더 좋습니다.
var1="$value" var2="$value" var3="$value" var4="$value" var5="$value" var6="$value" var7="$value" var8="$value" var9="$value" var10="$value"
하지만 이를 매우 짧은 방법으로 수행하려면 다음을 시도해 보세요.
declare var{1..10}="$value"
편집됨: printf 대신 중괄호 확장을 사용하고 eval 대신 선언을 사용합니다. 이는 $value
.
참조. 편집 1: 새로운 상황에서도 중괄호 확장을 사용할 수 있습니다.
declare var{T,z,3}="$value"
printf
를 처리할 수 있기 때문에 Annotation의 메소드보다 안전합니다 $value
.
답변2
let
산술 평가를 하고 있습니다. 에서는 bash
와 같습니다 (( ... ))
. 이것이 바로 코드가 정수로만 작동하는 이유입니다.
특별히 이름이 지정된 변수 대신 배열을 사용하십시오.
var=( "$value" "$value" "$value" "$value" "$value" "$value" "$value" "$value" "$value" "$value" )
printf 'var[5]=%s\n' "${var[5]}"
또는 연관 배열,
declare -A var
var=( ["T"]=$value ["z"]=$value [3]=$value )
printf 'var[T]=%s\n' "${var["T"]}"
루프를 수행할 수도 있습니다.
for varname in var0 var1 varT varfoo; do
declare -n var="$varname"
var=$value
done
이 루프는 변수 이름을 반복합니다. 루프 본문 내에서 현재 루프 변수를 참조하는 이름 참조 변수를 만듭니다. 이름 참조 변수의 값이 설정되면 명명된 변수도 설정됩니다.
답변3
value=balabala
eval var{1..10}=\$value
echo $var{1..10}
답변4
다음을 수행할 수 있습니다.
declare {varT,varz}="$value"