Linux bash:多变量赋值

新手上路,请多包涵

linux bash 中确实存在类似于 PHP 中以下代码的内容:

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

即,您在一句话中为 3 个不同的变量分配相应的值。

假设我有 bash 函数 myBashFuntion 将字符串“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 个陈述。

我只是在寻找一种快捷语法。可能吗?

原文由 GetFree 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 671
2 个回答

我首先想到的是:

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

不出所料,输出是

1|2|3

原文由 Michael Krelin - hacker 发布,翻译遵循 CC BY-SA 3.0 许可协议

我想将值分配给一个数组。因此,扩展 Michael Krelin 的方法,我做了:

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

产生:

 2|4|6

正如预期的那样。

原文由 soundray 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题