我有有效的 shell
(不是 bash
)代码,它将字符串拆分为 varialbes:
sh """
version='1.2.3.4'
echo \$version | { IFS=. read a b c d; echo \$a; }
echo \"a\" \$a
"""
这是输出:
+ version=1.2.3.4
+ IFS=. read a b c d
+ echo 1.2.3.4
+ echo 1
1
+ echo a
a
问题:
我无法在大括号外访问 a,b,c,d
的值
问题:
如何访问这些变量?
更新:
我通过 jenkins
pipeline
运行这段代码,这让我可以使用这种方法。如果我尝试使用另一个,它只会忽略解析字符串的尝试:
stage('test') {
steps {
sh """
version='1.2.3.4'
IFS=. read a b c d <<EOF
\$version
EOF
echo \"a\" \$a
"""
}
}
输出:
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (test)
[Pipeline] sh
[ScpPipeline] Running shell script
+ version=1.2.3.4
+ IFS=. read a b c d
[Pipeline] }
UPD_1:
问题出在空格和制表符中...... 0_o 所以这是工作变体(但丑陋):
stage('test') {
steps {
sh """
version='1.2.3.4'
IFS=. read a b c d <<EOF
\$version
EOF
echo \"a\" \$a \"b\" \$b \"c\" \$c \"d\" \$d
"""
}
}
最佳答案
使用此处文档而不是管道。
sh """
version='1.2.3.4'
IFS=. read a b c d <<EOF
\$version
EOF
echo \"a\" \$a
"""
关于linux - 如何访问在大括号外的大括号中定义的变量值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48193765/