协慌网

登录 贡献 社区

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

我有一个非常简单的脚本,如下所示:

#!/bin/bash

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

echo $MOREF

当我从命令行运行此脚本并将参数传递给它时,我没有得到任何输出。但是,当我运行$MOREF变量中包含的命令时,我能够获得输出。

我想知道如何获取需要在脚本中运行的命令的结果,将其保存到变量,然后在屏幕上输出该变量?

答案

除了反引号( `command` )之外,你可以使用$(command) ,我发现它更容易阅读,并允许嵌套。

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

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

引用( " )对保留多行值很重要。

更新 (2018 年):正确的方法是

$(sudo run command)

你使用的是错误的撇号。你需要` ,而不是' 。这个角色被称为 “反叛”(或 “重音”)。

像这样:

#!/bin/bash

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

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

echo "$MOREF"

正如他们已经向你指出的那样,你应该使用 '反引号'。

另外提出的$(command)可以工作,并且它也更容易阅读,但请注意它只对 bash 或 korn shell(以及从这些 shell 派生的 shell)有效,所以如果你的脚本必须在各种 Unix 上真正可移植系统,你应该更喜欢旧的反引号表示法。