${variable:-10} 和 ${variable: -10} 有什么区别?

参考回答

${variable:-10}${variable: -10} 看起来很相似,但它们的含义和作用是不同的。具体区别如下:

  1. ${variable:-10}
    • 这个语法表示 默认值替换,它会检查变量 variable 是否已定义并且有值。如果 variable 没有定义或者其值为空,则会返回 10 作为默认值;如果 variable 已定义且有值,则返回 variable 的值。
    • 解释:
      • 如果 variable 已定义且有值:返回 variable 的值。
      • 如果 variable 未定义或为空:返回 10

    示例:

    variable=5
    echo {variable:-10}  # 输出:5
    
    unset variable
    echo{variable:-10}  # 输出:10
    
    Bash
  2. ${variable: -10}
    • 这个语法表示 字符串截取,用于从变量 variable 的值中提取最后 10 个字符。如果 variable 的值长度少于 10 个字符,则返回整个字符串。
    • 注意,冒号前面没有指定起始位置,表示从字符串的结尾开始截取。

    示例:

    variable="HelloWorld"
    echo {variable: -10}  # 输出:HelloWorld
    
    variable="Short"
    echo{variable: -10}  # 输出:Short
    
    Bash

详细讲解与拓展

  1. ${variable:-10}:默认值替换
    • 当变量 variable 未定义或者为空时,${variable:-10} 会返回默认值 10
    • 当变量 variable 有值时,${variable:-10} 返回 variable 的值。
    • 它是一种 条件替换,类似于给变量设置一个默认值。

    例子:

    var=""
    echo {var:-10}  # 输出:10,因为 var 为空,使用默认值 10
    
    var="Hello"
    echo{var:-10}  # 输出:Hello,因为 var 已定义且有值
    
    Bash
  2. ${variable: -10}:字符串截取
    • 该语法从变量 variable 的值中截取 从结尾起的最后 10 个字符
    • 如果 variable 的值小于 10 个字符,它会返回整个字符串。
    • 这种用法常用于提取字符串的后缀部分。

    例子:

    var="abcdefg12345"
    echo ${var: -10}  # 输出:defg12345,表示从字符串的最后 10 个字符开始
    
    Bash

    如果变量的值不足 10 个字符,它会返回整个字符串:

    var="Hello"
    echo ${var: -10}  # 输出:Hello
    
    Bash

总结

  • ${variable:-10}默认值替换,在变量未定义或为空时使用默认值 10
  • ${variable: -10}字符串截取,从变量的值的末尾提取最后 10 个字符。

这两种用法虽然类似,但作用和使用场景完全不同:一个用于提供默认值,另一个用于处理字符串截取。

发表评论

后才能评论