理順shell擴展中的幾個超難記憶的東西
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的賦值運算,
posted on 2008-12-23 21:20 so true 閱讀(280) 評論(0) 編輯 收藏 所屬分類: Linux