res=${x-y};
res=${x:-y};
res=${x+y};
res=${x:+y};
res=${x=y};
res=${x:=y};
res=${x?y};
res=${x:?y};
规律如下:
x代表着“如果x不存在(也就是没被设定);res就取y的值”
x:代表着“如果x不存在或者x为空;res就取y的值”
对于-=?三个符号来说,这个意义都满足上述两天规则;
但对于+来说,可以视为对上述规则的取反,也就是:
x代表着“如果x存在(不管其空或不空);res就取y的值”
x:代表着“如果x存在且不为空;res就取y的值”
可以将-看作是最基本的,=是在其基础上加了一个对x的赋值运算,赋值的时机是当res要取为y时;+是-取反的意义;?相当于把res替换为了stderr。
总体说来,整个表达式的值,也就是res的值,要么为x要么为y,如果为y的话,那么就需要满足上述我给出的x或x:代表的含义。?是个特例,它用stderr取代了res,而且一旦要向stderr输出内容,那么程序就立即中断了,不会再执行后续的代码,也不会对res进行任何的赋值运算了。
对于=,与-的意义完全一致,只不过新加了一个对x的赋值运算,