我是新手Linux用戶,我遇到了這個問題。
如果下面的命令已被執行
set 10 20 30 40 50
shift
shift
我如何才能找到的$*
價值?
我是新手Linux用戶,我遇到了這個問題。
如果下面的命令已被執行
set 10 20 30 40 50
shift
shift
我如何才能找到的$*
價值?
從bash
手冊頁:
set
:該選項的處理之後剩餘的任何 參數都被 作爲位置參數的值和被分配,在 順序來$1
,$2
,。 ..$n
。
和:
shift [n]
: 從n+1 ...
位置參數重命名爲通過數字$#
到$#-n+1
是 未設置代表$1 ....
參數...如果n
沒有給出,它假定爲1.
所以你set
集:
$1 = 10
$2 = 20
$3 = 30
$4 = 40
$5 = 50
然後是shift
命令拋出$1
和一個洗牌其他$n
變量下來。你做兩次,讓你留下:
$1 = 30
$2 = 40
$3 = 50
你可以只使用:echo $*
看到輸出:
30 40 50
其有點奇怪.....問題說,值$ * ......的好處代表了放入命令中的所有內容,因此被傳遞到了posistional參數。
換檔命令只會將原來的命令行中的所有內容都推到一個地方......所以從10 20 30 40 50 .....在兩次換檔之後(2次向左推)您已經30 40 50現在可以通過指定位置/ occurence與像$ A $ 1:$ 2
$ set 10 20 30 40 50
$ shift 2
$ echo $*
30 40 50
把它簡單地訪問....
如果要訪問單個值....只需使用$ 1,$ 2 ....就像明智一樣,這裏$ 1將有30和$ 2將有40個。
你想知道你有多少個參數使用$#
$ echo $#
3
對此有幫助嗎?
找到$*
值的最簡單方法是呼應它:
echo $*
考慮所示的三個步驟,它會響應:
30 40 50
的$*
不帶引號的值是與不帶引號的[email protected]
的值相同,並且由shell腳本的所有位置參數組成,或者由set
命令設置的值組成,例如您顯示的值(由後續任何修改命令)。使用雙引號括起來,"$*"
表示一個包含所有位置參數的單個字符串,但"[email protected]"
表示多個字符串,每個字符串與位置參數相同。這是更爲正確的形式。
您可以看到與printf
命令這些形式之間的差別:
printf "%s\n" $*
printf "%s\n" "$*"
printf "%s\n" [email protected]
printf "%s\n" "[email protected]"
你會得到更深入地瞭解他們,如果你使用:
set -- 10 '20 30' ' 40 50 '
沒有任何的變化,然後用4 printf
命令:
printf "X%sX\n" $*
printf "X%sX\n" "$*"
printf "X%sX\n" [email protected]
printf "X%sX\n" "[email protected]"
X的發球標記打印值的開始和結束。輸出是:
X10X
X20X
X30X
X40X
X50X
X10 20 30 40 50 X
X10X
X20X
X30X
X40X
X50X
X10X
X20 30X
X 40 50 X
Bash手冊的相關部分是special parameters。
你是什麼意思,「找到價值」? –
對不起,我不應該說,「發現」,而是「輸入$ *的價值」 基本上我想找出已執行的命令,我需要得到的價值$ *。 – user2601569
我還是不明白。在你顯示'$ *'的命令後面只是'30 40 50'。 –