解析字符串中的两个整数并将它们分配给两个bash变量?

时间:2014-10-01 21:58:13

标签: bash

我有一个程序返回两个非负整数,作为由空格分隔的字符串。我需要在bash脚本中运行这个程序,我需要将输出整数分配给两个变量$i$j

为了明确,假设我在脚本中运行程序并将其输出存储在变量$out中,以便$out包含一个字符串,例如56 2。现在我需要以某种方式解析$out以分别分配给ij的整数结束。 我怎么能这样做?

2 个答案:

答案 0 :(得分:4)

要将out中的值分配给变量ij,您只需要read语句:

$ out="56 2"
$ read i j <<<"$out"
$ echo i=$i j=$j
i=56 j=2

<<<表示read语句应该从变量out指定的Here字符串中获取其stdin。

直接从命令

读取两个变量

为了特殊性,让我们假设命令是date,我们想要读取小时和分钟:

$ date +'%H %M'
15 45

要将这些变为变量,请使用:

$ read i j < <(date +'%H %M')
$ echo i=$i j=$j
i=15 j=45

上面的语法有点棘手。构造<(...)使程序的输出成为类文件对象。 (这称为“流程替换”。)在这种情况下,程序为date +'%H %M'。为了告诉read从该类文件对象中读取其输入(stdin),我们使用重定向,由<表示。因此< <(...)表示从parens中的命令输出中获取stdin。

<<(...)之间的空格至关重要。这是因为<<完全意味着其他东西:它表示Here文档的开头。所以,保持空间。

答案 1 :(得分:-1)

我建议你使用的解决方案是在Linux中使用 cut 程序。此工具包含在每个分发中。基本上它看起来像这样:

$out = program
$i = echo $out | cut -d" " -f1
$j = echo $out | cut -d" " -f2

参数-d&#34; &#34;指定使用空格字符划分字符串,-fX指定返回X列。例如,

$out = "56 2"
echo "56 2" | cut -d" " -f1
>56