在bash中读取命令帮助

时间:2011-04-21 01:51:15

标签: bash

我想读取数组中命令的输出:

类似的东西:

(使用输入框上方的{}重新格式化代码)

var=`echo tell told till`
echo "$var" | while read temp; do echo $temp ; done  

该程序将输出:

tell 
told 
till

我有两个问题:

  1. 读取命令从stdin读取。但在上述情况下,它是如何阅读的? echo将值放在stdout上。
  2. 我想知道如何将这些元素放入数组中?基本上如何将元素放在数组中的stdout中。读-a命令可以将元素放在stdin中,但我想要stdout。

4 个答案:

答案 0 :(得分:2)

如果要将stdout中的元素放入数组中,例如

declare -a array
array=( $(my command that generates stdout) ) #eg array=( $(ls))

如果你有一个变量并且想要放入数组

$> var="tell till told"
$> read -a array <<< $var
$> echo ${array[1]}
till
$> echo ${array[0]}
tell

或者只是

array=($var)

来自bash参考:

   Here Strings
       A variant of here documents, the format is:

              <<<word

       The word is expanded and supplied to the command on its standard input.

答案 1 :(得分:1)

管道(“|”)将前面命令的stdout连接到以下命令的stdin。

答案 2 :(得分:1)

要将字符串拆分为单词,您只需使用:

for word in $string;
do 
    echo $word;
done;

所以要做你想要的事情

while read line
do
    for word in $line
    do
        echo $word
    done
done

正如Ignacio Vazquez-Abrams所说,管道将左侧的标准连接到右侧的标准输出。

答案 3 :(得分:0)

使用管道时:

command1 | command2

写入标准输出的command1的输出将成为command2(stdin)的输入。管道将stdout转换为stdin。

对于数组: 您将值赋给数组:

array=(val1 val2 val3)

所以尝试一下:

array=($var)

现在$ array中有$ var:

> echo ${array[*]}
tell
told
till

> echo ${array[1]}
told

这是你的意思吗?