linux - 如何访问在大括号外的大括号中定义的变量值?

标签 linux bash shell jenkins

我有有效的 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/

相关文章:

python - 登录到远程机器并运行脚本

bash - $做什么?和 $# 在 Shell 脚本中代表什么?

android - 在 root 的 android 上执行 at 命令并得到结果

php - 如何停止使用 chmod 或 .htaccess 编辑父目录的 PHP 文件?

linux - 这些 awk 命令容易受到代码注入(inject)的攻击吗?

regex - 将定义的变量与egrep一起使用来匹配文本文件内的内容

linux - 使用 case 语句时出现 bash 语法错误

python - OpenCv - cv2.VideoWriter对象没有属性释放

python - 使用 pyudev 的监视器终止 USBdetector 线程

c++ - 二进制文件格式与基于文本的格式文件大小