我需要将命令的输出分配给变量。我试过的命令是:
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)}'
)'
答案 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!