Shell字符串

字符串(String)就是一系列字符的组合. 字符串是Shell编程中最常用的数据类型之一(除了数字和字符串, 也没有其它类型了).

字符串可以使用单引号包围, 也可以使用双引号包围, 也可以不用引号, 它们之间是有区别的.

str1='hello'
str2="hello"
str3=hello

三种形式的差别:

  • 单引号''包围的字符串
    • 单引号里的任何字符都会作为原始字符原样输出(所见即所得), 单引号字符串中的变量是无效的;
    • 单引号字符串中不能出现单引号, 即使对单引号进行转义也不行.

注意

对单引号使用转义字符后也不行, 因为单引号中的所有字符都作为原始字符, 转义字符在单引号中也是作为原始字符, 失去了转义的作用.

  • 双引号""包围的字符串
    • 双引号里可以有变量,变量会被解析, 得到该变量的值;
    • 双引号里可以出现转义字符.
  • 不被引号包围的字符串
    • 不被引号包围的字符串中出现变量时也会被解析;
    • 字符串中不能出现空格, 否则空格后边的字符串会作为其它变量或者命令解析.

拼接字符串

拼接字符串时, 把两个字符串写在一起, 中间不能有空白字符.

Example:

str1="hello""world"
echo ${str1}

str2="hello"
str3="world"
str4=${str2}${str3}
echo ${str4}

str5="hello"${str3}
echo ${str5}

获取字符换长度

获取字符串长度的语法形式为:

${#strName}

Example:

str="hello,world."
echo ${#str}

字符串截取

格式 说明
${string:start:length} 从string字符串的左边第start个字符开始, 向右截取length个字符.
${string:start} 从string字符串的左边第start个字符开始截取, 直到最后.
${string:0-start:length} 从string字符串的右边第start个字符开始, 向右截取length个字符.
${string:0-start} 从string字符串的右边第start个字符开始截取, 直到最后.
${string#*chars} 从string字符串第一次出现chars的位置开始, 截取chars右边的所有字符.
${string##*chars} 从string字符串最后一次出现chars的位置开始, 截取chars右边的所有字符.
${string%*chars} 从string字符串第一次出现chars的位置开始, 截取chars左边的所有字符.
${string%%*chars} 从string字符串最后一次出现chars的位置开始, 截取chars左边的所有字符.