Linux的庆典:多变量赋值
-
21-09-2019 - |
题
在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"
在说明具有是与一个命令的名称和可变(其中“=”可以是一个有效的参数)之间进行区分。
这一切似乎有点像在事件发生后证明,但在任何情况下,有分配给一个变量列表的方法没有提及。
不隶属于 StackOverflow