سؤال

هل يوجد في Linux Bash شيئًا مشابهًا للرمز التالي في PHP:

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

أي أن تخصص في جملة واحدة قيمة مقابلة إلى 3 متغيرات مختلفة.

لنفترض أن لدي وظيفة باش myBashFuntion هذا يكتب إلى stdout السلسلة "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]}

لكن هذه 3 عبارات أخرى أفضل تجنبه.

أنا فقط أبحث عن بناء جملة مختصرة. هل هو ممكن؟

هل كانت مفيدة؟

المحلول

أول شيء يتبادر إلى ذهني:

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

الإخراج هو ، مما لا يثير الدهشة

1|2|3

نصائح أخرى

أردت تعيين القيم إلى صفيف. لذلك ، تمتد مقاربة مايكل كريلين, ، فعلتُ:

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

يمكنك أيضًا التنسيق في أمر القراءة ، ولكن بعد ذلك يجب عليك استخدام المتغيرات داخل Subshell:

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 من كتاب طبخ باش بواسطة O'Reilly ، يناقش (بطول ما) أسباب المتطلبات في مهمة متغيرة أنه لا توجد مسافات حول علامة '='

MYVAR="something"

التفسير له علاقة بالتمييز بين اسم الأمر والمتغير (حيث "= 'قد يكون وسيطة صالحة).

يبدو كل هذا يشبه إلى حد ما التبرير بعد الحدث ، ولكن على أي حال لا يوجد ذكر لطريقة تعيين قائمة المتغيرات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top