質問

んが、PHPでLinuxのbashで、次のコードのようなものを存在します:

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

すなわち。もし3つの異なる変数に一つの文章に対応する値を割り当てます。

レッツ・言う私は、文字列「QWERT asdfg zxcvb」を標準出力に書き込み、bashの関数myBashFuntionを持っています。

:ような何かをすることが可能です
(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つの以上の文です。

私はただのショートカット構文を探しています。それは可能でしょうか?

役に立ちましたか?

解決

私の心に来る最初の事ます:

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

出力は当然、ある

1|2|3

他のヒント

私は、配列に値を代入したかったです。だから、マイケルKrelinのアプローチを拡張、私がやった:

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

これは利回ります:

2|4|6 

予想通ります。

私はこれかもしれないのヘルプを考える...

打破するためには、ユーザは、私は配列に日、月、年を格納し、次のように別々の変数に値を入れて、私のスクリプトで(YYYY / MM / DD)日付を入力します:

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

あなた可能性もリードコマンドへのパイプが、その後、あなたはサブシェル内の変数を使用する必要があると思います:

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

オライリーによってバッシュクックの第5章、(いくつかの長さで)で説明的な理由のために変数の割り当てにおける要件は「=」記号の前後にスペースが存在しないこと

MYVAR="something"
説明は、コマンドの名前と変数(「=」有効な引数でもよい)との区別とは何かを持っています。

このすべての小さなイベント後に正当化するように思えるが、どのような場合には変数のリストに割り当てる方法の言及がない。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top