如何使用bash和read将命令输出分配给变量

24 浏览
0 Comments

如何使用bash和read将命令输出分配给变量

我试图将一个命令的输出分配给多个变量,每个输出“单词”一个变量。在Linux上的bash中执行以下操作:\n

echo foo bar baz | read FOO BAR BAZ
echo $FOO $BAR $BAZ

\n只显示空字符串。执行以下操作:\n

read FOO BAR BAZ < <(echo foo bar baz)
echo $FOO $BAR $BAZ

\n按预期工作。这里出了什么问题?我以为使用管道是最明显且正确的方法。

0
0 Comments

如何使用bash和read将命令输出分配给变量

在bash中,我们经常需要将命令的输出结果分配给变量。这样我们就可以在后续的脚本中使用这些变量来执行其他操作。但是,有时我们可能会遇到一些问题,特别是当我们想要将多个值分配给多个变量时。在这篇文章中,我们将讨论这个问题的原因以及解决方法。

问题的原因:

当我们执行一个命令,并尝试将其输出结果分配给多个变量时,我们可能会遇到一些困难。例如,考虑以下代码片段:

read a b c <<< "$( echo 1 2 3 )" # a here-string

我们期望将命令`echo 1 2 3`的输出结果分配给变量`a`、`b`和`c`。然而,这段代码并不能按我们的期望工作。

解决方法:

为了解决这个问题,我们可以使用`while`循环结合`read`命令来逐行读取命令的输出,并将每一行的内容分配给相应的变量。以下是修复上述问题的代码示例:

echo 1 2 3 | while read a b c; do
    echo "a: $a, b: $b, c: $c"
done

在这个示例中,我们使用`echo 1 2 3`命令将输出结果传递给`while`循环。然后,`read`命令将每一行的内容分配给变量`a`、`b`和`c`。接下来,我们可以在循环体内使用这些变量来执行其他操作。

通过使用`while`循环和`read`命令,我们可以解决将命令输出分配给多个变量的问题。这种方法适用于需要将多个值分配给多个变量的情况。希望本文对你理解如何在bash中将命令输出分配给变量有所帮助。

0
0 Comments

在bash中,使用管道将命令的输出赋值给变量时会遇到问题。原因是管道创建了一个子shell,在子shell中变量FOO、BAR和BAZ被赋值,而在父shell中没有被赋值,所以打印不出任何结果。

解决方法是使用大括号将命令包裹起来,让echo命令在同一个子shell中运行,这样变量就能正确赋值并打印出正确结果。

另一种解决方法是使用进程替换,将echo命令的输出通过重定向赋值给变量。这样整个过程都在同一个shell中进行,所以能够正常打印出预期的结果。

下面是修改后的代码示例:

echo foo bar baz | { read FOO BAR BAZ ;  echo $FOO $BAR $BAZ ;}

read FOO BAR BAZ < <(echo foo bar barz)
echo $FOO $BAR $BAZ

通过以上的修改,可以正确将命令的输出赋值给变量,并打印出正确的结果。

0