我有一個別名:在猛砸別名有條件中止
alias local='if [ -z "${FUNCNAME[0]}" ]; then builtin local; fi; declare'
,我要使用本地命令重定向到我的修改聲明函數,然後可以聲明變量,只有使用builtin local
獲得錯誤消息如果在函數之外。
別名(使用一套-x)的輸出:
+ '[' -z '' ']'
+ builtin local
-bash: local: can only be used in a function
+ declare
現在它反正執行declare
,我想它如果檢查失敗退出。我不能使用這個功能。
到目前爲止,我已經試過回報,突破和退出(退出不是在這裏的原因很明顯):
alias 'local=if [ -z "${FUNCNAME[0]}" ]; then builtin local; return 1; break; fi; declare'
+ '[' -z '' ']'
+ builtin local
-bash: local: can only be used in a function
+ return 1
-bash: return: can only `return' from a function or sourced script
+ break
-bash: break: only meaningful in a `for', `while', or `until' loop
+ declare
例子:
# When outside an function
local some_var=val
+ '[' -z '' ']'
+ builtin local
-bash: local: can only be used in a function
# That's it
# When inside an function func
local some_var=val
+ '[' -z func ']'
+ declare some_var=val
# Uses my modified declare function
您是否試圖隱藏「本地」關鍵字?無論如何,如果你不希望它每次都運行,爲什麼不把'declare'放在'else'塊中呢? –
不是'local:只能用在一個函數中'解釋一下嗎?不要這樣做! ;-)任何需要變量參數的東西都應該寫成一個函數。祝你好運。 – shellter
@Eric Renouf如果我把聲明放在一個else塊中,它將無法聲明變量,請參閱我的更新。 – BonBon