【问题标题】:how to append a value to a variable in shell script如何将值附加到shell脚本中的变量
【发布时间】:2016-03-11 08:58:29
【问题描述】:

我从属性中获取一个变量值,并且可以在 sh 文件中访问。 但我无法向该变量附加另一个值。

请提出建议。

$ echo "Build ID from properties:"$BUILD_ID
Build ID from properties: abcd_v6_c1

$ echo " num----------------" build_${BUILD_ID}.zip
.zip---------------- build_abcd_v6_c1

请建议如何附加 .zip 值。

【问题讨论】:

  • 您可能在$BUILD_ID 变量的末尾有一个特殊字符,它对输出有不良影响(可能是^M^A)。您可以通过cat -A <<< "$BUILD_ID" 查询

标签: bash shell sh


【解决方案1】:

假设我们有一个变量var1=value。 如果我想在变量的开头添加一些文本,我可以这样做:

var1="some text${var1}"

如果我想在末尾添加一些文本,它将是:

var1="${var1}some text"

【讨论】:

    【解决方案2】:

    您的 $BUILD_ID 变量中似乎有一个 Windows carriage return

    要检查,试试这个命令(回车将显示为^M):

    cat -A <<< "$BUILD_ID"
    

    在你的终端,你可以试试这个(要获得^M char,使用CTRL + V + M):

    $ BUILD_ID="585548979^M"
    $ echo ${BUILD_ID}text
    

    结果应该是:

    text48979
    

    您可以使用 Bash 参数替换来清理您的变量:

    $ ID=${BUILD_ID%$'\r'}
    $ echo ${ID}text
    585548979text
    

    【讨论】:

    • @chepner 感谢您的编辑。请注意,${BUILD_ID/%$'\r'/} 也是有效的,因为它将后面的 `$'\r' 的最短字符串替换为空。但正如您建议的那样,缩短字符串会更简单。
    • 哦,对不起。我实际上已经将其读为${BUILD_ID%/$'\r'/}(将最初的/% 转置,这就是为什么我认为它是错误的)。
    • 做得很好(注意cat -A 是一个GNU 扩展;cat -et 也适用于 BSD/OSX catsed -n l 符合 POSIX替代)。
    【解决方案3】:

    以下方法对我有用。我的 .sh 文件有以下内容:

    #!/bin/bash -x
    . /usr/test/build.properties
    echo $BUILD_ID
    echo "num----------------" build_${BUILD_ID}.zip
    

    【讨论】:

    • 什么是 o/p 我得到了下面的 o/p .zip---------------- build_abcd_v6_c1 但我需要 build_abcd_v6_c1.zip
    【解决方案4】:

    您可以简单地使用assignment(=) 运算符来附加文本。

    a=don
    b=$a" jon"
    echo $b #==>don jon
    

    【讨论】:

      【解决方案5】:

      谢谢大家,

      能够解决这个问题.. 这是因为 ^M 感谢@Kenavoz 现在我得到了正确的 ID 并且能够继续进行操作。

      更改:BUILD_ID=${ID%$'\r'}

      谢谢, Sampath A

      【讨论】:

        猜你喜欢
        • 2014-01-04
        • 2018-11-30
        • 1970-01-01
        • 1970-01-01
        • 2021-10-15
        • 2011-10-21
        • 2016-10-29
        • 1970-01-01
        • 2018-05-27
        相关资源
        最近更新 更多