[linux] Linux bash : 다중 변수 할당

PHP의 다음 코드와 유사한 Linux bash에 존재합니까?

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

즉, 한 문장에서 해당 값을 3 개의 다른 변수에 할당합니다.

myBashFuntion“qwert asdfg zxcvb”문자열을 stdout에 쓰는 bash 함수가 있다고 가정 해 보겠습니다. 다음과 같이 할 수 있습니까?

(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 / yyyy)를 분석하기 위해 일, 월, 연도를 배열에 저장 한 다음 값을 다음과 같이 별도의 변수에 넣습니다.

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"

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

이 모든 것은 사건 후 정당화하는 것과 비슷해 보이지만 어떤 경우에도 변수 목록에 할당하는 방법에 대한 언급은 없습니다.


답변