Shell详解~(三)Shell字符串;(四)数组

三、Shell字符串

shell中的数据类型就两种:字符串、数字。

3.1. 字符串定义

  1. 单引号' '方式:

    任何字符串都会原样输出,在这里面使用的变量是无效的

    # 定义一个变量
    var1=‘zhang: ${PATH}’

    echo ${var1}
    # 得到的结果还是zhang: ${PATH}

  2. 双引号" "方式(推荐):

    双引号内包含了变量,那么该变量会被解析得到值,而不是原样输出

    var2=“nihao ${PATH}”
    echo var2
    # nihao 后面就是环境变量的值(是没有引号的)

    要是想要让输出的值里带引号,就需要转义:

    var=“you are \”${var2}\""
    # 这样echo $var结果中,后面那串值就会带双引号

  3. 不用引号的方式:

    这与使用双引号类似,也会解析字符串中出现的变量,但是不能出现空格,否则空格后面的字符串会作为其它命令解析

    无空格:

    # 在var1变量后面+一个nihao
    var3=${var1}nihao
    # 下面就自会输出nihao,后面就没了
    var3=niao${var1}
    注:以上都是用echo ${var3}输出得到。

    有空格:

    new=“top”

    # 这里一回车就会直接执行top
    var5=nihao ${new}

    # 一回车就报错,说没有nihao这个命令
    var6=${new} nihao

    # 这就会执行ls命令,
    var7=${new} ls

    注: 这感觉意义不大,那不如不要定义变量,这行直接写要执行的命令就好了

3.2 获取字符串长度

语法:${#字符串变量名} # 里面的#是固定写法

var=“hello world”

# 下面会得到 11
echo ${#var}

3.3. 字符串拼接

定义两个变量:var1=abc; var2=hello

  1. 无符号拼接:var3=v a r 1 {var1}var1{var2}

    # 中间不能有空格(有的话就是同上无引号有空格)

  2. 双引号拼接,# 任意拼接:var3="${var1} 123 ${var2}"

  3. 混合拼接:var3=${var1}‘123’${var2} 或者 var3=${var1}“123”${var2}
    # 就还是使用双引号吧

3.4. 字符串截取

​ 假设一个变量var=welcome to beijing,然后那个要找的char设定为e;

格式说明
${变量名:start:length}从左侧start个字符开始,
向右截取length个字符,start从0开始; echo ${var:0:2}
${变量名:start}不给length,就是向右截取完; echo ${var:2}
${变量名:0-start:length}从右侧start个字符开始,
向右截取length个字符,start从1开始; echo ${var:0-5:2}
${变量名:0-start}从右侧start字符,向右截取完; echo ${var:0-2}
${变量名#*chars}从字符串左侧第一次出现char的位置开始,
截取char右边的所有字符; echo ${var#*e}
${变量名##*chars}从字符串右侧第一次出现char的位置开始,
截取char右边的所有字符; echo ${var##*e}
${变量名%chars*}从字符串右边第一次出现char的位置开始,
截取char左边的所有字符; echo ${var%e*}
${变量名%%chars*}从字符串右边最后一次出现char的位置开始,
截取char左边的所有字符; echo ${var%%e*}

​ Tips:这里是引用变量的字符串截取。

四、数组

定义:Shell支持数据(Array),但只支持一维数组

语法:在shell中,用括号( )来表示数组,数组之间用空格来分隔

方式1:array1=(item1 item2 …)

方式2:array2=([索引下标1]=item1 [索引下标2]=item2 …)

注意:等号=两边不能有空格。

示例:

  • arr1=(123 456 “nihao”)

  • arr2[5]=100
    # arr2也不用事先定义,那也只有${arr2[5]}才有值,其它都没

  • arr3=([0]=123 [3]=“nihao” [9]=“都可以”)
    # 不一定非得是按照顺序来变


元素的获取: # 注意必须使用{ }

  1. 通过下标:${arr[index]}
  2. 获取值同时赋值给其它变量:item=${arr[index]}
  3. 使用@*可以获取数组中的所有元素:${arr[@]}${arr[*]}
  4. 获取数组的长度或个数:${#arr[@]}${#arr[*]}
  5. 获取数组指定元素的字符长度:${#arr[index]}

数组的拼接:就是将两个数组连接成一个数组

语法:使用@*获取数组所有元素后进行拼接

array_new=(${array1[@]} ${array2[@]} …)

array_new=(${array1[*]} ${array2[*]} …)


数组的删除

删除数组的指定元素:

  • unset 数组名[index] # 就好比是 unset array_new[2]

删除整个数组:

  • unset 数组名 # 其实就是把这个变量名删除

版权声明:本文为nianjiuhuiyi原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。