programing

Linux bash: 다중 변수 할당

easyjava 2023. 4. 14. 22:18
반응형

Linux bash: 다중 변수 할당

Linux bash에는 PHP의 다음 코드와 유사한 것이 있습니다.

list($var1, $var2, $var3) = function_that_returns_a_three_element_array() ;

즉, 한 문장에서 세 가지 변수에 해당하는 값을 할당합니다.

bash 기능이 있다고 칩시다.myBashFuntionstdout 문자열 "qwert asdfg zxcvb"에 씁니다.다음과 같은 작업을 수행할 수 있습니까?

(var1 var2 var3) = ( `myBashFuntion param1 param2` )

등호 왼쪽에 있는 부분은 물론 유효한 구문이 아닙니다.난 그저 내가 원하는 걸 설명하려는 거야

다만, 기능하는 것은 다음과 같습니다.

array = ( `myBashFuntion param1 param2` )
echo ${array[0]} ${array[1]} ${array[2]}

그러나 인덱스 배열은 일반 변수 이름만큼 설명적이지 않습니다.
하지만, 나는 할 수 있었다:

var1 = ${array[0]} ; var2 = ${array[1]} ; var3 = ${array[2]}

하지만 그건 피하고 싶은 세 가지 진술입니다.

간단한 구문을 찾고 있습니다.가능합니까?

제일 먼저 떠오르는 건

read -r a b c <<<$(echo 1 2 3) ; echo "$a|$b|$c"

당연히 출력은

1|2|3

값을 배열에 할당하려고 했습니다.Michael Krelin의 접근방식을 확장하여 다음과 같이 했습니다.

read a[{1..3}] <<< $(echo 2 4 6); echo "${a[1]}|${a[2]}|${a[3]}"

그 결과:

2|4|6 

역시나

이게 도움이 될 것 같은데...

스크립트에서 사용자가 입력한 날짜(mm/dd/yyy)를 분석하기 위해 일, 월 및 년을 배열에 저장한 후 다음과 같이 값을 다른 변수에 넣습니다.

DATE_ARRAY=(`echo $2 | sed -e 's/\// /g'`)
MONTH=(`echo ${DATE_ARRAY[0]}`)
DAY=(`echo ${DATE_ARRAY[1]}`)
YEAR=(`echo ${DATE_ARRAY[2]}`)

가끔은 뭔가 펑키한 걸 해야 할 때도 있어요.예를 들어 SDGuero의 날짜 예제에서 명령어를 읽고 싶지만 여러 개의 포크를 사용하지 않도록 합니다.

read month day year << DATE_COMMAND
 $(date "+%m %d %Y")
DATE_COMMAND
echo $month $day $year

read 명령어에 파이프로 연결할 수도 있지만 하위 셸 내의 변수를 사용해야 합니다.

day=n/a; month=n/a; year=n/a
date "+%d %m %Y" | { read day month year ; echo $day $month $year; }
echo $day $month $year

결과...

13 08 2013
n/a n/a n/a

O'Reilly의 Bash Cookbook 5장에서는 '=' 기호 주위에 공백이 없어야 하는 변수 할당의 요구 이유를 (어느 정도 길게) 논의한다.

MYVAR="something"

이 설명은 명령 이름과 변수('='는 유효한 인수일 수 있음)를 구별하는 것과 관련이 있습니다.

이 모든 것이 이벤트 후에 정당화되는 것처럼 보이지만, 어떤 경우에도 변수 목록에 할당하는 방법에 대한 언급은 없습니다.

let var1=var2=var3=0
또는
var1=var2=var3="기본값"

언급URL : https://stackoverflow.com/questions/1952404/linux-bash-multiple-variable-assignment

반응형