res=${x-y};
res=${x:-y};
res=${x+y};
res=${x:+y};
res=${x=y};
res=${x:=y};
res=${x?y};
res=${x:?y};
規(guī)律如下:
x代表著“如果x不存在(也就是沒被設(shè)定);res就取y的值”
x:代表著“如果x不存在或者x為空;res就取y的值”
對于-=?三個(gè)符號來說,這個(gè)意義都滿足上述兩天規(guī)則;
但對于+來說,可以視為對上述規(guī)則的取反,也就是:
x代表著“如果x存在(不管其空或不空);res就取y的值”
x:代表著“如果x存在且不為空;res就取y的值”
可以將-看作是最基本的,=是在其基礎(chǔ)上加了一個(gè)對x的賦值運(yùn)算,賦值的時(shí)機(jī)是當(dāng)res要取為y時(shí);+是-取反的意義;?相當(dāng)于把res替換為了stderr。
總體說來,整個(gè)表達(dá)式的值,也就是res的值,要么為x要么為y,如果為y的話,那么就需要滿足上述我給出的x或x:代表的含義。?是個(gè)特例,它用stderr取代了res,而且一旦要向stderr輸出內(nèi)容,那么程序就立即中斷了,不會再執(zhí)行后續(xù)的代碼,也不會對res進(jìn)行任何的賦值運(yùn)算了。
對于=,與-的意義完全一致,只不過新加了一個(gè)對x的賦值運(yùn)算,