开发工具

Shell 字符串操作

13 篇文章69 次收藏
上一节:Shell 数组下一节:Shell 运算符

在 Shell 脚本中,字符串操作是一项基本且强大的功能,它允许你对文本进行各种处理,如提取、替换、删除等。以下是一些常见的 Shell 字符串操作方法及其示例:

1. 字符串长度

获取字符串长度

str="Hello, World!"
echo ${#str}  # 输出 13


2. 字符串提取

从字符串中提取子字符串

str="Hello, World!"
echo ${str:0:5}  # 输出 Hello

这里 ${str:start:length} 表示从 start 位置开始,提取长度为 length 的子字符串。


3. 字符串替换

替换字符串中的子字符串

str="Hello, World!"
echo ${str/World/Shell}  # 输出 Hello, Shell!

${str/old/new} 会将 str 中的第一个 old 替换为 new。


全局替换

str="banana banana"
echo ${str//banana/apple}  # 输出 apple apple

${str//old/new} 会将 str 中的所有 old 替换为 new。


4. 字符串删除

删除字符串中的子字符串

str="Hello, World!"
echo ${str#Hello,}  # 输出 World!

${str#prefix} 会删除 str 开头的 prefix。


删除末尾子字符串

str="Hello, World!"
echo ${str%World!}  # 输出 Hello,

${str%suffix} 会删除 str 末尾的 suffix。


删除所有匹配的前缀或后缀

str="abcabcabc"
echo ${str##*bc}  # 输出 abc
echo ${str%%ab*}  # 输出 c

${str##*pattern} 会删除 str 开头匹配 pattern 的最长部分,${str%%pattern*} 会删除 str 末尾匹配 pattern 的最长部分。


5. 字符串判断

检查字符串是否相等

str1="Hello"
str2="World"
if [ "$str1" = "$str2" ]; then
    echo "Strings are equal"
else
    echo "Strings are not equal"
fi


检查字符串是否为空

str=""
if [ -z "$str" ]; then
    echo "String is empty"
else
    echo "String is not empty"
fi


6. 字符串拼接

拼接字符串

str1="Hello"
str2="World"
result="${str1}, ${str2}!"
echo $result  # 输出 Hello, World!


7. 字符串转换

转换为大写或小写

str="Hello, World!"
echo ${str^^}  # 输出 HELLO, WORLD!
echo ${str,,}  # 输出 hello, world!


注意事项

1、字符串索引从 0 开始。

2、某些操作(如替换和删除)可以支持模式匹配,但需要注意转义特殊字符。

3、Shell 字符串操作通常依赖于参数扩展,这在 Bash 中是常用的,但在其他 Shell(如 sh)中可能不完全支持。

4、通过灵活使用这些字符串操作方法,你可以编写出功能强大的 Shell 脚本,以处理各种文本处理任务。


上一节:Shell 数组下一节:Shell 运算符