在Shell脚本中,`${}` 是一种用于变量扩展和字符串操作的语法

时间:2025-03-08 12:18:02

Shell脚本中,${} 是一种用于变量扩展和字符串操作的语法。以下是${}的一些实际用法和举例说明:

  1. 基本变量扩展
name="World"
echo "Hello, ${name}!"  # 输出: Hello, World!
  • 1
  • 2
  1. 默认值和空值处理

如果变量未设置或为空,${variable:-default} 会返回默认值

name=""
echo "Hello, ${name:-Guest}!"  # 输出: Hello, Guest!
  • 1
  • 2
  1. 字符串长度

${#variable} 用于获取字符串的长度。

str="Hello"
echo "The length of ${str} is ${#str}."  # 输出: The length of Hello is 5.
  • 1
  • 2
  1. 子字符串扩展

${variable:offset:length} 用于从字符串中提取子字符串。

str="Hello, World!"
echo "${str:7:5}"  # 输出: World
  • 1
  • 2
  1. 字符串替换

${variable/pattern/replacement} 用于替换字符串中的模式。

str="apple, banana, apple"
echo "${str/apple/orange}"  # 输出: orange, banana, apple
  • 1
  • 2

如果要全局替换,可以使用//

echo "${str//apple/orange}"  # 输出: orange, banana, orange
  • 1
  1. 字符串删除

${variable#pattern}${variable%pattern} 分别用于从字符串的开头和结尾删除匹配的模式。

str="abc_prefix_def"
echo "${str#*_}"  # 输出: prefix_def

str="abc_suffix_def_xyz"
echo "${str%_*}"  # 输出: abc_suffix_def
  • 1
  • 2
  • 3
  • 4
  • 5
  1. 数组

${array[@]}${array[*]} 用于获取数组的所有元素。${array[index]} 用于获取数组的指定元素。

fruits=("apple" "banana" "cherry")
echo "${fruits[1]}"  # 输出: banana
echo "${fruits[@]}"  # 输出: apple banana cherry
  • 1
  • 2
  • 3
  1. 高级用法

${variable:^}${variable:,,} 等高级用法可以用于大小写转换等。但请注意,这些高级用法可能不是所有Shell都支持的。
9. 命令替换

${...} 也可以与命令替换结合使用,如 $(command) 或反引号 command。但请注意,在这种情况下,${} 内部是命令替换的结果,而不是变量名。

files=$(ls)
echo "Files: ${files}"  # 输出: Files: ... (列出当前目录下的文件)
  • 1
  • 2
  1. 参数扩展

在脚本或函数中,${!prefix@}${!prefix*} 可以用于扩展与给定前缀匹配的所有变量。这通常用于处理位置参数或命名参数。

这些只是${}在Shell中的一些常见用法。实际上,它提供了许多其他功能和选项,可以根据需要进行深入探索。