我不明白這行老的腳本在我的項目之一:
USER=${1:-`id -un`}
我不明白這行老的腳本在我的項目之一:
USER=${1:-`id -un`}
這是一個bash
參數擴展模式。
給定語句表示:
如果$1
(第一位置參數(自變量))的值是設置或者爲空,則命令id -un
的輸出將被設置爲變量USER
如果參數$1
設置爲非空,則$1
的擴展將設置爲參數USER
。
而且變量USER
應寬在登錄時設置會話,除非你有你不應該直接修改它一個很好的理由。然後,您可以在腳本中使用不同的變量名稱作爲解決方案。
檢查man bash
的Parameter Expansion
部分以獲得更多想法。
解析這樣說:
${}
告訴你,這是一個parameter expansion:-
是使用:-
右手的default value如果左手是沒有設置例如:
$ sv="set v"
$ echo ${sv:-`whoami`}
set v
$ echo ${not_set:-`whoami`}
dawg
還有其他形式的,包括:
${parameter:?word}
顯示如果參數是未設置錯誤,的word
僅當
$ echo ${not_set:?'is not set to anything'}
-bash: not_set: is not set to anything
${parameter:+word}
替代值parameter
設置爲
$ echo ${sv:+'substitute for sv'}
substitute for sv
${parameter:=word}
分配parameter
的word
如果parameter
值未設置
$ echo ${not_set:='now it IS set'}
now it IS set
$ echo "$not_set"
now it IS set
查看id
(man id
)的手冊頁,命令id -un
將返回用戶的實際名稱。
格式:-
只有在未設置左側的內容時纔會使用右側的內容。有關此語法的更多信息,請參閱here。
因此,您提供的代碼實質上是默認給用戶,但如果提供的話,則將$USER
變量替換爲值$1
。
即線被設置稱爲USER
變量的值:
USER=....
相等的右側有幾個等級。
${ }
。$1
。這就是爲什麼它是${1 ... }
。NUL
或未設置,${1:- }
正在測試值$1
。$1
是NUL
或取消設置,則將該值替換爲-
的縱座標。-
與}
之間的值是「命令替換」。id -un
。你可以理解它與man id
有什麼關係。id -un
打印一個名稱。當前用戶(如果用戶被省略)。同樣的命令可以由$(id -un)
執行。
這將改變行這樣的:
$ USER=${1:-$(id -un)}
將設置用戶給定的位置參數1
或執行就行了當前用戶的名稱的名稱。
要嘗試它,你可以做一個函數:
$ tf(){ USER=${1:-$(id -un)}; echo "$USER"; }
如果給出值,該值將被打印回:
$ tf bind
bind
如果用戶名沒有給出,執行用戶名稱被打印:
$ tf
bize