shell 大括号 变量的展开替换

bash 提供了丰富的展开替换功能, 都是一些和大括号有关的操作。主要分为两个类别。 第一:根据一个变量是否存在并且非空为条件进行返回值或者显示信息。 第二:字符串处理。

四种展开的方式

表达式 name存在 name不存在
${varname:-word } 返回name的值 返回word
${varname:=word } 返回name的值 设置成word的值
${varname:?message} 返回name的值 显示 varname:mesage
${varname:+word} 返回word的值 返回 null

如果变量存在只有+返回的是null,其他返回的都是该值。 变量存在返回的都是值,不一定是原来的值
如果变量不存在加号返回null,减号返回word 。 等号是设置值, 问号是显示信息。 变量不存在,效果各不同

name=bob

#bob     bob
echo -n {name:-no user}; echo -n -e "\t";  echo{name}

#no user
echo -n {name_var:-no user}; echo -n -e "\t"; echo{name_var}


#bob     bob
echo -n {name:=no user}; echo -n -e "\t";  echo{name}


#no user no user
echo -n {name_var:=no user}; echo -n -e "\t"; echo{name_var}


#bob     bob
echo -n {name:?no user}; echo -n -e "\t";  echo{name}

#no user no user
echo -n {name_var:?no user}; echo -n -e "\t"; echo{name_var}

#bob     bob
echo -n {name:?no user}; echo -n -e "\t";  echo{name}

#no user no user
echo -n {name_var:?no user}; echo -n -e "\t"; echo{name_var}

对变量的修改, 三大类,六小类。

形式 含义
${var#key} 从头开始删除,最短匹配
${var##key} 从头开始删除,最长匹配
${var%key} 从尾删除,最短匹配
${var%%key} 从尾删除,最长匹配
${var/old/new} 仅仅替换一次把, old替换成new
${var//old/new} 全部替换

可以用*来代替任意字符

USR=(head -1 /etc/passwd)
echoUSR #root:x:0:0:root:/root:/bin/bash

echo {USR#*:} # x:0:0:root:/root:/bin/bash
echo{USR##*:} # /bin/bash
echo {USR\%:*} # root:x:0:0:root:/root
echo{USR\%\%:*} # root
echo {USR/root/admin} # admin:x:0:0:root:/root:/bin/bash
echo{USR//root/admin} # admin:x:0:0:admin:/admin:/bin/bash

发表评论

邮箱地址不会被公开。