在Shell脚本中,${}
是一种用于变量扩展和字符串操作的语法。以下是${}
的一些实际用法和举例说明:
- 基本变量扩展
name="World"
echo "Hello, ${name}!" # 输出: Hello, World!
- 1
- 2
- 默认值和空值处理
如果变量未设置或为空,${variable:-default}
会返回默认值。
name=""
echo "Hello, ${name:-Guest}!" # 输出: Hello, Guest!
- 1
- 2
- 字符串长度
${#variable}
用于获取字符串的长度。
str="Hello"
echo "The length of ${str} is ${#str}." # 输出: The length of Hello is 5.
- 1
- 2
- 子字符串扩展
${variable:offset:length}
用于从字符串中提取子字符串。
str="Hello, World!"
echo "${str:7:5}" # 输出: World
- 1
- 2
- 字符串替换
${variable/pattern/replacement}
用于替换字符串中的模式。
str="apple, banana, apple"
echo "${str/apple/orange}" # 输出: orange, banana, apple
- 1
- 2
如果要全局替换,可以使用//
:
echo "${str//apple/orange}" # 输出: orange, banana, orange
- 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
- 数组
${array[@]}
或 ${array[*]}
用于获取数组的所有元素。${array[index]}
用于获取数组的指定元素。
fruits=("apple" "banana" "cherry")
echo "${fruits[1]}" # 输出: banana
echo "${fruits[@]}" # 输出: apple banana cherry
- 1
- 2
- 3
- 高级用法
${variable:^}
、${variable:,,}
等高级用法可以用于大小写转换等。但请注意,这些高级用法可能不是所有Shell都支持的。
9. 命令替换
${...}
也可以与命令替换结合使用,如 $(command)
或反引号 command
。但请注意,在这种情况下,${}
内部是命令替换的结果,而不是变量名。
files=$(ls)
echo "Files: ${files}" # 输出: Files: ... (列出当前目录下的文件)
- 1
- 2
- 参数扩展
在脚本或函数中,${!prefix@}
或 ${!prefix*}
可以用于扩展与给定前缀匹配的所有变量。这通常用于处理位置参数或命名参数。
这些只是${}
在Shell中的一些常见用法。实际上,它提供了许多其他功能和选项,可以根据需要进行深入探索。