Shell脚本中如何将命令结果存入变量?现有写法失效求排查
解决命令执行结果存入变量的问题
哦,这个问题我碰到好多次了!你现在的写法没用到命令替换,所以shell根本不会去执行那条git describe管道命令,反而把命令本身当成了变量赋值的一部分,自然拿不到想要的结果。
正确的写法
你需要用$()(推荐)或者反引号`把整个要执行的命令包裹起来,这样shell才会先执行命令,再把输出结果赋值给变量:
OUTPUT=$(git describe --tags --abbrev=0 | awk -F. '{$NF+=1; OFS="."; print $0}') echo "${OUTPUT}"
为什么原来的写法不行?
你原来的代码:
OUTPUT=git describe --tags --abbrev=0 | awk -F. '{$NF+=1; OFS="."; print $0}'
shell会把它拆成两部分:
- 试图给
OUTPUT赋值为字符串git,然后把describe --tags --abbrev=0当成独立的命令去执行 - 后面的
| awk ...是一个单独的管道,和前面的变量赋值完全没关系
所以最终OUTPUT变量里根本没存到命令的执行结果,自然echo出来是空的。
小提示
$()是现代shell(bash、zsh等)推荐的命令替换写法,嵌套使用时不需要转义,可读性更强- 如果你用老式的反引号
`,写法是OUTPUT=`git describe --tags --abbrev=0 | awk -F. '{$NF+=1; OFS="."; print $0}'`,但嵌套复杂命令时容易出错,所以优先用$()
内容的提问来源于stack exchange,提问作者user9528667
相关产品推荐
相关产品推荐

