📜  拆分 bash 字符串 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:25:51.830000             🧑  作者: Mango

拆分 bash 字符串 - Shell-Bash

在 Shell-Bash 编程中,拆分字符串是一个重要的操作。本文将介绍如何在 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 的内置方法分割字符串
1. 利用分隔符分割

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
2. 利用正则表达式分割

除了使用分隔符分割字符串外,还可以使用正则表达式分割。Bash 提供了一个内置函数 read,可以使用正则表达式分割字符串。例如:

str="apple:banana:orange"
echo $str | while read -d ":" item; do
  echo $item
done

# 输出结果为:
# apple
# banana
# orange

read-d 参数指定分隔符。


总结

本文介绍了在 Bash 中拆分字符串的常用方法。使用 分隔符正则表达式 可以实现字符串的拆分。同时注意避免风险,如使用 subsring 时需要注意长度,使用正则表达式需要注意转义字符等。