149

Linuxのbashには、PHPの次のコードに似たものが存在します。

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

つまり、1つの文で、対応する値を3つの異なる変数に割り当てます。

myBashFuntion文字列「qwertasdfgzxcvb」を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]}

しかし、これらは私が避けたいと思う3つのステートメントです。

ショートカット構文を探しています。出来ますか?

4

5 に答える 5

266

私の頭に浮かぶ最初のこと:

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

出力は、当然のことながらです

1|2|3
于 2009-12-23T12:16:42.897 に答える
22

値を配列に割り当てたかったのです。それで、マイケル・クレリンのアプローチを拡張して、私はしました:

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

これにより、次のようになります。

2|4|6 

予想通り。

于 2014-02-07T10:19:43.260 に答える
5

私はこれが役立つかもしれないと思います...

スクリプトでユーザーが入力した日付(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]}`)
于 2009-12-29T23:55:45.897 に答える
5

時々あなたは何かファンキーなことをしなければなりません。コマンド(たとえば、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
于 2013-08-13T20:39:28.097 に答える
0

O'ReillyによるBashCookbookの第5章では、「=」記号の周りにスペースがないという変数代入の要件の理由について(ある程度の長さで)説明しています。

MYVAR="something"

この説明は、コマンドの名前と変数の名前を区別することと関係があります(ここで、「=」は有効な引数である可能性があります)。

これはすべて、イベント後に正当化するのと少し似ているように見えますが、いずれの場合も、変数のリストに割り当てる方法については言及されていません。

于 2009-12-23T12:25:01.313 に答える