Bash
我可以取消設置 $1 變數嗎?
是否可以取消設置 $1 變數?如果沒有,我無法找到它在
man
.[root@centos2 ~]# set bon jour [root@centos2 ~]# echo $1$2 bonjour [root@centos2 ~]# unset $1 [root@centos2 ~]# echo $1$2 bonjour [root@centos2 ~]#
編輯:
最後,這是我在 man (
man set option double-dash
) 中發現的清空所有位置參數的內容(並且該人使用了“未設置”這個詞!):如果此選項後沒有參數,則未設置位置參數。
[root@centos2 ~]# echo $1 [root@centos2 ~]# set bon jour [root@centos2 ~]# echo $1$2 bonjour [root@centos2 ~]# set -- [root@centos2 ~]# echo $1$2 [root@centos2 ~]#
@Jeff Schaller 的回答幫助我理解了這一點。
您不能取消設置位置參數,但您可以轉換
$2
為$1
,從而有效地刪除 的舊值$2
。$ set -- bon jour $ echo "$1$2" bonjour $ shift $ echo "$1$2" # $2 is now empty (i.e. "unset" or "not set") jour
該
shift
命令會將所有位置參數向下移動一級。命令行解析循環(不使用getopt
/getopts
)通常在每次迭代中移動位置參數,同時重複檢查$1
. 想要取消設置位置參數是不常見的。順便說一句,
unset
接受一個變數名,而不是它的值,因此unset $1
實際上會取消設置變數bon
(如果之前設置過)。