bash - 如何设置bash变量等于命令输出?

  显示原文与译文双语对照的内容

我正在研究一个简单的脚本项目,它涉及到BASH的使用。 我有一个非常简单的脚本,如下所示:


#!/bin/bash

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

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

echo $MOREF

当我从 命令行 运行这个脚本并传递参数时,我无法得到任何输出。 但是,当我运行MOREF变量中包含的命令时,我可以得到输出。 我想知道如何获取一个需要在脚本中运行的命令的结果,保存到一个变量,然后在屏幕上输出该变量?

时间:

于nesting,相关除对反引号,你可以使用 $() 之外,这让我觉得更易于阅读,并且 allows.


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

引用( " ) 对保留multi-line值很重要。

你使用的撇号类型不对。 你需要 `,而不是 ' 。 这里字符称为"横翻"( 或者"严重音符") 。

就像这个:


#!/bin/bash

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

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

echo $MOREF

就像他们已经向你指出的,你应该使用'横翻'。

建议的$(command) 也可以使用,而且更易于阅读,但是请注意,它只对bash或者 korn shell ( 和从这些) 有效,所以如果你的脚本在各种Unix系统上都是可以移植的,那么你应该更喜欢老式的反斜杠。

你应该用引号将命令括起来:


OUTPUT=`ls -l`
echo $OUTPUT

将命令放在引号中执行它并返回输出而不在屏幕上打印。

我知道三种方法:

1 ) 功能适用于此类任务:

 
func (){
ls -l
}

 

通过口述 func 调用它

2 ) 也可以是另外一个合适的解决方案:


var="ls -l"
eval $var

3 ),第三个使用变量直接:


var=$(ls -l)
OR
var=`ls -l`

可以良好的方式获得第三个解决方案的输出:

 
echo"$var"

 

也以令人讨厌的方式:

 
echo $var

 

这是另一种方法,要用于一些编辑器是为无法正确高亮显示你创建的每个复杂的代码好。


read -r -d '' str <<(cat somefile.txt)
echo"${#str}"
echo"$str"

...