如何在bitbucket-pipelines.yml中分行编写长命令并存入变量?
解决带管道的长命令分行存入变量的问题
我太懂这种折腾长命令的痛苦了!想用反引号把带管道的长命令存进变量,结果分行写就失效,对吧?给你几个实用的解决办法:
推荐方法:用
$()替代反引号$()是反引号的现代替代方案,支持自然分行,可读性更强,还能轻松处理命令嵌套。写法如下:var=$( your_command -arg1 value1 \ -arg2 value2 \ | awk '{print $2}' \ | grep "target_pattern" )这里的
\是续行符,用来告诉shell当前命令还没结束,下一行是命令的延续。如果把管道符放在行尾,其实不加\也能正常工作,不过加续行符会让代码结构更清晰,避免意外问题。如果坚持用反引号的写法
要是你习惯用反引号,记得在每行末尾加续行符\,包括管道所在的行,确保shell把所有行当成同一个命令的一部分:var=`\ your_command -arg1 value1 \ -arg2 value2 \ | awk '{print $2}' \ `不过还是更推荐
$(),反引号在处理嵌套命令时会很麻烦,而且视觉上也不如$()直观。
为什么你原来的写法会失效?因为shell在反引号内遇到无续行标记的换行时,会默认认为命令已经结束,管道后面的部分会被当成独立的命令执行,导致变量只捕获了前半段命令的结果,甚至直接报错。
内容的提问来源于stack exchange,提问作者Hussein Hijazi
相关产品推荐
相关产品推荐

