我有一个非常简单的脚本,大致如下:

#!/bin/bash

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

echo $MOREF

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

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


当前回答

您需要使用

$(此处为命令)

or

`command-here`

实例

#!/bin/bash

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

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

echo "$MOREF"

其他回答

可以使用反引号(也称为重音坟墓)或$()。

喜欢:

OUTPUT=$(x+2);
OUTPUT=`x+2`;

两者都有相同的效果。但是OUTPUT=$(x+2)更可读,并且是最新的。

Mac/OSX现在有旧的Bash版本,即GNUbash,版本3.2.57(1)-发布(arm64-apple-darwin21)。在这种情况下,可以使用:

new_variable="$(some_command)"

具体示例:

newvar="$(echo $var | tr -d '123')"

注意(),而不是Bash 4中通常的{}。

如果您尝试执行的命令失败,它会将输出写入错误流,然后打印到控制台。

要避免这种情况,必须重定向错误流:

result=$(ls -l something_that_does_not_exist 2>&1)

我知道三种方法:

功能适用于此类任务:**函数(){ls-l}通过说func来调用它。还可以评估另一种合适的解决方案:var=“ls-l”评估$var第三种是直接使用变量:var=$(ls-l)或var=`ls-l`

您可以很好地获得第三个解决方案的输出:

echo "$var"

而且以一种令人讨厌的方式:

echo $var

只是为了与众不同:

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