Linux 将命令的输出分配给变量(BASH)
我需要将命令的输出分配给变量。我尝试的命令是:Linux 将命令的输出分配给变量(BASH),linux,bash,shell,command,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:
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)}'
)'
为了解决问题,以及其他一些事情,看看你是否能让它工作,你也可以尝试使用“backticks”,例如 将
pwd
命令的输出保存在变量cur_dir中,但通常最好使用$()
方法
从以下给我的页面开始:
第二种形式`COMMAND`
(使用backticks)对于Bash来说或多或少是过时的,因为它
嵌套有一些问题(“内部”回跳需要转义)
和转义字符。使用$(命令)
,它也是POSIX
使用“$()”子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)
确切的错误是什么,您确定使用的是
bash
?看起来不错。这(可能)与您看到的任何错误都没有关系,但是--您的整个管道可以作为单个命令awk'/UUID/&&/ext4/{print substr($1,6)}fstab
来编写。您在复制粘贴的错误消息的末尾有一个额外的单引号(与上面包含的内容不同)“awk'/UUID/&&/ext4/{print substr($1,6)}”fstab
可能的重复在`
和$()
之间是否有实际的区别?@Shahbaz确实如此,$()
在嵌套结构中工作得更好,而反勾则更为棘手。有一个关于这个的讨论,但我现在找不到。我找到了它,我会把它放在我的答案中。使用$()
嵌套肯定更清楚,但我的意思是bash有实际的区别吗?他们的行为不同吗?或者它们是同一事物的不同语法?好的,我刚看到你的更新。Dang,我喜欢背底片,它们很容易打字。“沙赫巴兹,我通常用背底片,它们为我工作,但是我注意到如果我做更复杂的事情,我可能想考虑其他的选择。好,这里有个问题:它在终端工作。但是,我希望它在脚本中工作。@ErayTuncer这当然是由于您的脚本中有一个输入错误。应该不需要通过awk传递awk。grep可能也不需要。@jordanm:当然,我的目的是将OP命令影响到shell变量。如果我有5秒钟的时间,我将添加一个较短的命令^^
# Third step : awk use fstab directlty
UUID=$(awk '/UUID.*ext4/ {print substr($1,6)}' /etc/fstab)