Skip to content

LV015-字符串

一、字符串

1. 基本格式

在 shell 中,字符串可以用单引号,也可以用双引号,也可以不用引号。

  • 单引号

单引号里的任何字符都会原样输出,单 引号字符串中的变量是无效的。单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

shell
str='string'
  • 双引号

双引号里可以有变量,也可以出现转义字符。

2. 拼接字符串

2.1 使用单引号拼接

shell
#!/bin/bash 
str1='World'

str2='Hello,'$str1' !'
str3='Hello, $str1 !'
echo $str2
echo $str3

输出结果为:

shell
Hello,World !
Hello, $str1 !

2.2 使用双引号拼接

shell
#!/bin/bash 
str1="World"

str2="Hello, "$str1" !"
str3="Hello, $str1 !"
echo $str2
echo $str3

输出结果为:

c
Hello, World !
Hello, World !

3. 获取字符串长度

3.1 使用格式

shell
${#<string >}
  • string :为要获取长度的目标字符串变量。

3.2 使用实例

shell
#!/bin/bash 
str1='World'
str2="World"

echo "str1's length=${#str1}"
echo "str1's length=${#str2}"

输出结果为:

shell
str1's length=5
str1's length=5

4. 提取字符串

4.1 截取方式 1

shell
${<string>:n:len}

提取出的字符串为 n 位置处字符极其之后的 len-1 个字符。

  • string :为要获取长度的目标字符串变量。
  • n :为起始字符位置;
  • len :为截取字符串的长度。

注意】 字符串中首个字符的索引为 0 。

使用实例

shell
#!/bin/bash 
str1='Hello, World'
str2="Hello, World"

echo "${str1:2:3}"
echo "${str2:2:7}"

输出结果为:

shell
llo
llo, Wo

4.2 截取方式 2

shell
${parameter#*word}  # 即从左向右截取第一个 word 后的字符串
${parameter##*word} # 即从左向右截取最后一个 word 后的字符串
${parameter%word*}  # 即从右向左截取第一个 word 前的字符串
${parameter%%word*} # 即从右向左截取最后一个 word 前的字符串

注意】 上边的这些命令截取之后,都是不包含 word 的,所以如果开头或者结尾含有 word 的时候,可能会截取出来一个空的字符串。

使用实例

shell
#!/bin/sh
FILE_PATH=a/b/c/d/file.tar.gz
echo "\${FILE_PATH}      = ${FILE_PATH}"
echo ""
echo "\${FILE_PATH#*/}   = ${FILE_PATH#*/}"
echo "\${FILE_PATH##*/}  = ${FILE_PATH##*/}"
echo "\${FILE_PATH%/*}   = ${FILE_PATH%/*}"
echo "\${FILE_PATH%%/*}  = ${FILE_PATH%%/*}"
echo ""
echo "\${FILE_PATH#*.}   = ${FILE_PATH#*.}"
echo "\${FILE_PATH##*.}  = ${FILE_PATH##*.}"
echo "\${FILE_PATH%.*}   = ${FILE_PATH%.*}"
echo "\${FILE_PATH%%.*}  = ${FILE_PATH%%.*}"

输出的结果如下:

shell
hk@vm:~/1sharedfiles/6temp$ ./1.sh 
${FILE_PATH}      = a/b/c/d/file.tar.gz

${FILE_PATH#*/}   = b/c/d/file.tar.gz
${FILE_PATH##*/}  = file.tar.gz
${FILE_PATH%/*}   = a/b/c/d
${FILE_PATH%%/*}  = a

${FILE_PATH#*.}   = tar.gz
${FILE_PATH##*.}  = gz
${FILE_PATH%.*}   = a/b/c/d/file.tar
${FILE_PATH%%.*}  = a/b/c/d/file

5. 查找字符串中字符

5.1 使用格式

可以通过 expr 实现字符串中特定字符的查找,这种查找方式会查找字符串中首次出现该字符的位置。

shell
Variable= `expr index "${<string>}" <char> `
  • string :为要查找的目标字符串变量。
  • char :为要查找的字符。

使用实例

shell
string="runoob is a great site"
echo `expr index "$string" o`  # 输出 4

注意

(1)在查找过程中,字符串中首个字符的索引为 1 。

(2)以上脚本中 ` 是反引号,而不是单引号 '

(3) char 可以是多个字符,例如对于 ac , a , c 两个字符哪个先出现,就会停止查找,返回首先出现的字符在目标字符串中的首次出现的位置。

5.2 使用实例

shell
#!/bin/bash 
str1='Hello, World'
str2="Hello, World"

echo  expr index "$str1" ' ' 
echo  expr index "$str2" l

输出结果为:

shell
7
3