Linuxのbash:複数の変数への代入
-
21-09-2019 - |
質問
んが、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"
説明は、コマンドの名前と変数(「=」有効な引数でもよい)との区別とは何かを持っています。
このすべての小さなイベント後に正当化するように思えるが、どのような場合には変数のリストに割り当てる方法の言及がない。