在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个,我宁愿以避免更多的语句。

我只是在寻找一个快捷方式语法。这可能吗?

有帮助吗?

解决方案

即进入我的脑海里

第一件事:

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 

如预期。

我觉得这可能会帮助...

为了打破用户在我的脚本输入的日期(月/日/年),我的日,月和年存储到一个数组,然后把这些值到单独的变量如下:

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

您也可以管进入读命令,但你不得不一个子shell中使用的变量:

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

由O'Reilly的击食谱第5章讨论了(在一些长度)的原因在一个变量赋值的要求,有可围绕“=”符号没有空格

MYVAR="something"

在说明具有是与一个命令的名称和可变(其中“=”可以是一个有效的参数)之间进行区分。

这一切似乎有点像在事件发生后证明,但在任何情况下,有分配给一个变量列表的方法没有提及。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top