字符串子串

定义变量$string=”this_is_a_test”

    ${#string} : 取字符串长度,空格也算

 

    ${string:position} : 从positon处提取字符串,positon0开始.也可以认为是提取postion之后字符串,不算position处

 

    ${string:position:length} : 从position位置处取length长的字符串.也可以 echo ${string} | cut –c 1-4,取1-4的字符,1为第一个

 

    ${string#substring} : 返回从变量开头开始删除最短匹配substring子串后的字符串

    echo${string#thi}       ->     s_is_a_test   (看似没有问题)

    echo${string#is_is} ->     this_is_a_test(中间子串不行)

    echo${string#*is_is}    ->     _a_test(*很重要)

    由此可以知道这种方法会删除substring及其前所有字符串,或者说只返回其后的字符串

    下例更清晰:

    echo${string#*_}    ->     is_a_test

   

 

${string##substring} : 返回从变量开头开始删除最长匹配substring子串后的字符串

    echo${string##*_}       ->     test

   

${string%substring} : 返回从变量结尾开始删除最短匹配substring子串后的字符串

    echo${string%test}      ->     this_is_a_(只要是末尾的可不用*)

    echo${string%te}    ->     this_is_a_test(不行)

    echo${string%_*}    ->     this_is_a

   

${string%%substring} : 返回从变量结尾开始删除最长匹配substring子串后的字符串

    echo ${string%%_*}   ->     this                              

    ${string/substring/newstring}:第一个substring替换为newstring

       echo${string/is/are}    -> thare_is_a_test

   

    ${string//substring/newstring} :所有substring替换为netstring

       echo${string//is/are}      ->  thare_are_a_test

替换也可以加#或%

   

    ${string:-newstring} : 如果string为空值或未定义,返回newstring

否则返回string。

    echo${aaa:-test}    ->     test                           

 

    ${string:=newstring} : 如果string为空值或未定义,返回newstring

并将newstring赋值给string;否则返回string。可防止变量没有定义

    echo${aaa:=test}    ->     test

    echo$aaa                ->     test

 

${string:+newstring} : 如果string为空值或未定义,则返回空;如果string不为空,返回newstring

echo ${aaa:+test}    ->     空  (aaa为空值或未定义)

echo ${aaa:+test}    ->     test(aaa存在且不为空值)

 

${string:?newstring} : 如果string为空值或未定义,则将newstring写入标准错误输出流,本次执行失败;否则返回string

echo ${aaa:?newstring} ->bash: aaa: test(aaa不存在或为空值)

    echo $?    -> 1

echo ${aaa:?newstring} ->aaa   (aaa值为aaa)

 

$((算术表达式))   :   返回表达式的结果

echo $((70-23))          ->  47


你可能感兴趣的:(字符串子串)