我有一个程序返回两个非负整数,作为由空格分隔的字符串。我需要在bash脚本中运行这个程序,我需要将输出整数分配给两个变量$i
和$j
。
为了明确,假设我在脚本中运行程序并将其输出存储在变量$out
中,以便$out
包含一个字符串,例如56 2
。现在我需要以某种方式解析$out
以分别分配给i
和j
的整数结束。
我怎么能这样做?
答案 0 :(得分:4)
要将out
中的值分配给变量i
和j
,您只需要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