将命令的输出分配给变量(BASH)

时间:2012-07-17 17:40:56

标签: linux bash shell command

我需要将命令的输出分配给变量。我试过的命令是:

grep UUID fstab | awk '/ext4/ {print $1}' | awk '{print substr($0,6)}'

我尝试使用此代码分配变量:

UUID=$(grep UUID fstab | awk '/ext4/ {print $1}' | awk '{print substr($0,6)}')

但是,它会出现语法错误。另外我希望它在bash脚本中工作。

错误是:

./upload.sh: line 12: syntax error near unexpected token ENE=$( grep UUID fstab | awk '/ext4/ {print $1}' | awk '{print substr($0,6)}'
 )'

./upload.sh: line 12:   ENE=$( grep UUID fstab | awk '/ext4/ {print $1}' | awk '{print substr($0,6)}'
 )'

2 个答案:

答案 0 :(得分:14)

好吧,使用'$()'子shell运算符是获取bash命令输出的常用方法。因为它跨越子壳,所以效率不高。

我试过了:

UUID=$(grep UUID /etc/fstab|awk '/ext4/ {print $1}'|awk '{print substr($0,6)}')
echo $UUID # writes e577b87e-2fec-893b-c237-6a14aeb5b390

它完美无缺:)

编辑:

当然你可以缩短你的命令:

# First step : Only one awk
UUID=$(grep UUID /etc/fstab|awk '/ext4/ {print substr($1,6)}')

再一次:

# Second step : awk has a powerful regular expression engine ^^
UUID=$(cat /etc/fstab|awk '/UUID.*ext4/ {print substr($1,6)}')

您还可以将awk与文件参数::

一起使用
# Third step : awk use fstab directlty
UUID=$(awk '/UUID.*ext4/ {print substr($1,6)}' /etc/fstab)

答案 1 :(得分:2)

只是出于解决问题的目的,还有别的东西可以尝试看看你是否可以使用它,你也可以尝试使用“反引号”,例如,

cur_dir=`pwd`

会将pwd命令的输出保存在变量cur_dir中,但通常最好使用$()方法。

quote上给我的页面中的http://unix.stackexchange.com

  

对于Bash,第二种形式`COMMAND`(使用反引号)或多或少已经过时了,因为它   嵌套有一些麻烦(“内部”反引号需要转义)   并逃脱角色。使用$(COMMAND),它也是POSIX!