7

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

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)}'
 )'
4

2 回答 2

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)
于 2012-07-17T17:46:14.253 回答
2

仅出于排除故障的目的,以及尝试查看是否可以使其正常工作的其他目的,您还可以尝试使用“反引号”,例如,

cur_dir=`pwd`

会将pwd命令的输出保存在您的变量 cur_dir 中,尽管使用$()方法通常更可取。

引用http://unix.stackexchange.com上给我的页面:

第二种形式`COMMAND`(使用反引号)对于 Bash 来说或多或少已经过时了,因为它在嵌套(“内部”反引号需要转义)和转义字符方面存在一些问题。使用$(COMMAND),它也是 POSIX!

于 2012-07-17T17:45:02.543 回答