Bash 字符串运算符
同其他编程语言一样,在 Bash 中,字符串也是一种数据类型。只要以" “引起来,不论是数字还是字符,都会被 Bash 视为字符串。如"Welcome to W3Cschool”。
字符串运算符
= 等于运算符,等于时返回true。
语法示例:
Str1 = Str2
应用示例:
#!/bin/bash
Str1="W3Cschool.cn"
Str2="W3C"
if [ $Str1 = $Str2 ];
then
echo "True"
else
echo "False"
fi
执行后得到以下结果:
False
!= 不等于运算符,不等于时返回true。
语法示例:
Str1 != Str2
应用示例:
#!/bin/bash
Str1="W3Cschool.cn"
Str2="W3C"
if [[ $Str1 != $Str2 ]];
then
echo "True"
else
echo "False"
fi
执行后得到以下结果:
True
检查字符串长度是否为零。
- -n,不为零时返回true。
语法示例:
-n Str
应用示例:
#!/bin/sh
Str="Welcome to W3Cschool"
if [ -n $Str ];
then
echo "True"
else
echo "False"
fi
执行后返回以下结果:
True
- -z为零时。返回true。
语法示例:
-z Str
应用示例:
#!/bin/sh
Str="Welcome to W3Cschool"
if [ -z $Str ];
then
echo "True"
else
echo "False"
fi
执行后返回以下结果:
False
检查字符串长度是否为空。
- -str不为空时,返回true。
语法示例:
-str Str
应用示例:
#!/bin/sh
Str="Welcome to W3Cschool"
if [ -str $Str ];
then
echo "True"
else
echo "False"
fi
执行后返回以下结果:
True
Bash 查找字符串长度
在某些情况下,您可能需要了解字符串的长度才能对该字符串执行某些操作。由于在 Bash 中没有相关的内置函数,所以需要参考以下几种方法来学习查找字符串的长度。
方法一
在查找字符串长度的方法中,最简单的是使用#符号。
语法示例:
$(#String)
应用示例:
#!/bin/bash
Str="Welcome to W3Cshool.cn"
length=${#Str}
echo "Length of '$Str' is $length"
执行后得到以下结果:
Length of 'Welcome to W3Cscholl.cn' is 23
方法二
也可将expr命令与length关键字一起使用。
语法示例:
`expr length "$String"`
应用示例:
#!/bin/bash
Str="Welcome to W3Cscholl.cn"
length=`expr length "$Str"`
echo "Length of '$Str' is $length"
执行后得到以下结果:
Length of 'Welcome to W3Cscholl.cn' is 23
方法三
您也可以选择使用expr “$String”: ’ .*'来查找字符串长度。
语法示例:
expr "$String": ' .*'
应用示例:
#!/bin/bash
Str="Welcome to W3Cscholl.cn"
length=`expr "$Str" : '.*'`
echo "Length of '$Str' is $length"
执行后得到以下结果:
Length of 'Welcome to W3Cscholl.cn' is 23
方法四
您也可以选择使用wc命令来查找字符串的长度。
应用示例:
#!/bin/bash
Str="Welcome to W3Cscholl.cn"
length=`echo $Str | wc -c`
echo "Length of '$Str' is $length"
执行后得到以下结果:
Length of 'Welcome to W3Cscholl.cn' is 23
方法五
或者您可以选择使用awk命令来查找字符串长度。
应用示例:
#!/bin/bash
Str="Welcome to W3Cscholl.cn"
length=`echo $Str |awk '{print length}'`
echo "Length of '$Str' is $length"
执行后得到以下结果:
Length of 'Welcome to W3Cscholl.cn' is 23
注:
在这五个方法中,最常用的还是方法一。简单快捷永远是最优选。
为避免在某些特殊情况下需要更换操作方法,建议您脚踏实地的学习哦。
Bash 拆分字符串
在某些情况下,您可能需要先拆分字符串以进行您下一步的操作。由于在 Bash 中不包含类似其他编程语言中的split内置函数,所以需要参考以下几种方法来学习如何拆分字符串。
内部域分隔符
您可以使用$IFS在 Bash 中将字符串细分。
- IFS被称为“内部域分隔符”,是一种 set 变量。
- 当 bash shell 处理“命令替换”或“参数替换”时,会根据IFS的值来拆解读入的变量,然后对其进行处理。
- IFS的默认值为空格符,也可使用\t,\n等值作为分隔符设置给IFS。
示例:
#!/bin/bash
read -p "Enter any string separated by space: " str #读取字符串的值。
IFS=' ' #将空格设置为分隔符。
read -ra strArr <<<"$str" #将字符串读取到数组中,并由 IFS 分配分隔符。
for i in "${strArr[@]}"; #遍历访问数组中的每个元素。
do
echo "$i"
done
执行后得到以下结果:
Enter any string separated by space:welcome to W3Cschool
welcome
to
W3Cschool
readarray 命令
在不使用IFS的情况下,您可以使用 readarray命令加上-d选项对字符串进行分割。
示例:
#!/bin/bash
read -p "Enter any string separated by colon(:) " str #读取字符串的值,并将分隔符设置为 : 。
readarray -d : -t strArr <<<"$str" #根据设置的分隔符 : 来拆分字符串。
printf "\n"
#遍历打印输出数组中的每一个值
for (( n=0; n < ${#strArr[*]}; n++ ))
do
echo "${strArr[n]}"
done
执行后得到以下结果:
Enter any string separated by colon(:) welcome:to:W3Cschool
welcome
to
W3Cschool
Trim命令
您还可以使用tr命令来分割字符串。tr用于在原有定界符的基础上,对字符串进行拆分。
示例:
#!/bin/bash
str="welcome;to;W3Cschool!" #定界符 ;
arr=($(echo $str | tr ";" "\n"))#将定界符定义给 tr
for i in "${arr[@]}"
do
echo $i
done
执行后得到以下结果:
welcome
to
W3Cschool!
Bash 提取子字符串
在 Bash 中可以使用多种方法从字符串中提取子串。子串就是包含在其父字符串中的子字符串。
基础语法定义
提取子字符串的命令是 Bash 的内置命令,相比于其他的字符串操作,给予了很大的便利。
语法:
${variable:offset:length}
注:
- variable是目标字符串的变量名称。
- offset位置,指定从何处开始提取字符串。
- length偏移量,指定开始执行的字符范围。
应用示例
从字符串开头提取至指定字符结束
#!/bin/bash
echo "String: welcome to W3Cschool."
str="welcome to W3Cschool."
echo "Total characters in a String: ${#str} "
substr="${str:0:10}"
echo "Substring: $substr"
echo "Total characters in Substring: ${#substr} "
执行后得到以下结果:
String: welcome to W3Cschool.
Total characters in a String:21
Substring: welcome to
Total characters in Substring:10
从指定字符开始提取至结尾结束
#!/bin/bash
str="welcome to W3Cschool."
substr="${str:12}"
echo "$substr"
执行后得到以下结果:
W3Cschool.
Bash 拼接字符串
字符串的拼接是任何一种编程语言的硬性通用要求之一。在 shell 中字符串的拼接十分简单,但仍然需要注意细节上的处理。
基本语法
str3="${str1}${str2}"
注:
- {}作用为帮助解释器识别变量边界。
- 在此出于严谨考虑,最好应养成随手添加{}的习惯,避免疏忽导致脚本执行效果未达到您的期望。
示例
#!/bin/bash
str1="welcome to"
str2=" W3Cschool."
str3="${str1}${str2}"
str4="Hello user,${str1}${str2}"
echo $str3
echo $str4
注:
- 在此出于严谨考虑,最好应养成随手添加 " "的习惯,避免疏忽导致脚本执行效果未达到您的期望。
- 在代码第8行,若不以 " "将整个语句引起,解释器在遇到空格时将会视为字符串结束,空格之后的内容将作为其他变量或命令进行解析。
执行后得到以下结果:
welcome to W3Cschool.
Hello user,welcome to W3Cschool.