我需要将命令的输出赋给一个变量。我尝试的命令是:
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)}'
)'发布于 2012-07-18 01:46:14
嗯,使用'$()‘子subshell操作符是获取bash命令输出的常用方法。因为它跨越了一个子subshell,所以效率不是很高。
我试过了:
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-18 01:45:03
你也可以试着使用"backticks",例如,
cur_dir=`pwd`我会将pwd命令的输出保存在变量cur_dir中,尽管使用$()方法通常更可取。
从http://unix.stackexchange.com上给我的页面发送到quote
对于
来说,第二种形式的
`COMMAND`(使用反引号)或多或少已经过时了,因为它在嵌套(“内部”反引号需要转义)和转义字符方面有一些问题。使用$(COMMAND),它也是POSIX!
https://stackoverflow.com/questions/11527899
复制相似问题