如何在Bash中把一个变量设置为一个命令的输出?

我有一个相当简单的脚本,类似于以下内容。

#!/bin/bash

VAR1="$1"
MOREF='sudo run command against $VAR1 | grep name | cut -c7-'

echo $MOREF

当我从命令行上运行这个脚本并把参数传给它时,我没有得到任何输出。 然而,当我运行包含在$MOREF变量中的命令时,我能够得到输出。

怎样才能把需要在脚本中运行的命令的结果,保存在一个变量中,然后在屏幕上输出这个变量呢?

解决办法

除了背号command外,你还可以使用$(command)"$(command)",我觉得这样更容易阅读,而且可以嵌套使用。

OUTPUT="$(ls -1)"
echo "${OUTPUT}"

MULTILINE=$(ls \
   -1)
echo "${MULTILINE}"

引号(")对保留多行值确实很重要。

评论(14)

正确的方法是

$(sudo run command)

如果你要使用撇号,你需要,而不是。这个字符被称为"反标"(或"重音")。

像这样。

#!/bin/bash

VAR1="$1"
VAR2="$2"

MOREF=`sudo run command against "$VAR1" | grep name | cut -c7-`

echo "$MOREF"
评论(4)

只是为了与众不同。

MOREF=$(sudo run command against $VAR1 | grep name | cut -c7-)
评论(0)