Bash

我可以取消設置 $1 變數嗎?

  • September 21, 2021

是否可以取消設置 $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(如果之前設置過)。

引用自:https://unix.stackexchange.com/questions/365710