定义变量$string=”this_is_a_test”
${#string} : 取字符串长度,空格也算
${string:position} : 从positon处提取字符串,positon从0开始.也可以认为是提取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