📅  最后修改于: 2023-12-03 15:25:51.830000             🧑  作者: Mango
在 Shell-Bash 编程中,拆分字符串是一个重要的操作。本文将介绍如何在 Bash 中拆分字符串。
在 Bash 中,字符串变量可以使用单引号或双引号来定义。例如:
str1='hello world'
str2="hello world"
两种定义方式的区别在于双引号字符串可以解析一些特殊字符,如变量($
)和转义字符(\
),而单引号字符串则不会。例如:
name='John'
echo "My name is $name" # 输出 My name is John
echo 'My name is $name' # 输出 My name is $name
如果需要把一个字符串分割成若干个子字符串,可以使用 Bash 的内置方法。
Bash 提供了一个内置函数 IFS
,用来设置分隔符。默认的分隔符是空格符、制表符和换行符。例如:
str="apple,banana,orange"
IFS=',' # 设置分隔符为逗号
array=($str) # 把字符串按照逗号分割为数组
echo ${array[0]} # 输出 apple
echo ${array[1]} # 输出 banana
echo ${array[2]} # 输出 orange
# 恢复默认的分隔符(空格符、制表符和换行符)
IFS=$' \t\n'
注意:使用 subsring 是有风险的。例如在以下情况下:
str="/root/user/data/files/test.txt"
echo ${str##*/} # 错误!输出结果为:test.txt
结果是错误的,因为 ##*/
只能去掉 /root/user/data/files/
部分,而不能去掉其中的 /
。正确的方法应该使用 ${str##*/}
,例如:
echo ${str##*/} # 输出 test.txt
除了使用分隔符分割字符串外,还可以使用正则表达式分割。Bash 提供了一个内置函数 read
,可以使用正则表达式分割字符串。例如:
str="apple:banana:orange"
echo $str | while read -d ":" item; do
echo $item
done
# 输出结果为:
# apple
# banana
# orange
read
的 -d
参数指定分隔符。
本文介绍了在 Bash 中拆分字符串的常用方法。使用 分隔符 或 正则表达式 可以实现字符串的拆分。同时注意避免风险,如使用 subsring 时需要注意长度,使用正则表达式需要注意转义字符等。