Bash将Shell命令的输出分配给变量

时间:2020-01-09 10:45:55  来源:igfitidea点击:

如何在类似操作系统的Unix下将shell命令的输出分配给shell变量?
例如,如何将date命令的输出存储到一个名为$now的变量中。
你是怎样做的?
如何在Bash中将变量设置为命令的输出?
您需要使用bash的命令替换功能。
它允许您运行shell命令并将其输出存储到bash变量。

Bash将Shell命令的输出分配给并存储到变量

要将任何shell命令的输出分配给bash中的变量,请使用以下命令替换语法: |-| |难度|容易(rss)| | root特权|否| |要求|重击| |时间| 2m |

var=$(command-name-here)
var=$(command-name-here arg1)
var=$(/path/to/command)
var=$(/path/to/command arg1 arg2)

或者使用如下基于反引号的语法将Linux命令的输出分配给变量:

var=`command-name-here`
var=`command-name-here arg1`
var=`/path/to/command`
var=`/path/to/command arg1 arg2`

等号和命令必须位于=的右侧之后,请勿放置任何空格。
有关更多信息,请参见如何为shell变量赋值。

例子

让我们看一些运行bash的Linux,macOS,* BSD和类Unix系统的常见示例。

BASH命令输出到变量

要将日期命令输出存储到名为" now"的变量中,请执行:

## store date command output to $now  ##
now=$(date)

或者

## alternate syntax ##
now=`date`

要显示返回结果(或者输出存储在名为$now的变量中),请使用echo或者printf命令:

echo "$now"
printf "%s\n" "$now"

输出示例:

Wed Apr 25 00:55:45 IST 2012

您可以按以下方式组合echo命令和shell变量:

echo "Today is $now"

输出示例:

Today is Wed Apr 25 00:55:45 IST 2012

您可以在echo命令本身中进行命令替换(无需使用shell变量):

echo "Today is $(date)"
printf "Today is %s\n" "$(date)"

输出示例:

Today is Wed Apr 25 00:57:58 IST 2011

如何使用多行命令

尝试以下语法:

my_var=$(command \
arg1 \
arg2 \
arg3 )
echo "$my_var"

例如,

## date example ##
OUT=$(date \
--date='TZ="America/Los_Angeles" 09:00 next Thu')
echo "$OUT"

另一个适用于您的ping命令示例:

#!/bin/bash
_ping="/bin/ping"
domain="www.theitroad.local"
 
ping_avg="$(${_ping} \
-q \
-c 4 \
${domain} | grep rtt)"
 
echo "Avg ping time for ${domain} : ${ping_avg}"