日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務,提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747


 

在編寫 linux bash shell 腳本時,經(jīng)常會用到 $0、$1、$2、$#、$@、$*、$? 等參數(shù),下面具體說明這些參數(shù)的含義。

假設執(zhí)行 ./test.sh a b c 這樣一個命令,則可以使用下面的參數(shù)來獲取一些值:

  • $0 對應 "./test.sh" 這個值。如果執(zhí)行的是 ./work/test.sh, 則對應 ./work/test.sh 這個值,而不是只返回文件名本身的部分。
  • $1 會獲取到 a,即 $1 對應傳給腳本的第一個參數(shù)
  • $2 會獲取到 b,即 $2 對應傳給腳本的第二個參數(shù)
  • $3 會獲取到 c,即 $3 對應傳給腳本的第三個參數(shù)。$4、$5 等參數(shù)的含義依此類推。
  • $# 會獲取到 3,對應傳入腳本的參數(shù)個數(shù),統(tǒng)計的參數(shù)不包括 $0。
  • $@ 會獲取到 "a" "b" "c",也就是所有參數(shù)的列表,不包括 $0。
  • $* 也會獲取到 "a" "b" "c", 其值和 $@ 相同。但 "$*" 和 "$@" 有所不同。"$*" 把所有參數(shù)合并成一個字符串,而 "$@" 會得到一個字符串參數(shù)數(shù)組。
  • $? 可以獲取到執(zhí)行 ./test.sh a b c 命令后的返回值。在執(zhí)行一個前臺命令后,可以立即用 $? 獲取到該命令的返回值。該命令可以是系統(tǒng)自身的命令,可以是 shell 腳本,也可以是自定義的 bash 函數(shù)。

當執(zhí)行系統(tǒng)自身的命令時,$? 對應這個命令的返回值。
當執(zhí)行 shell 腳本時,$? 對應該腳本調用 exit 命令返回的值。如果沒有主動調用 exit 命令,默認返回為 0。
當執(zhí)行自定義的 bash 函數(shù)時,$? 對應該函數(shù)調用 return 命令返回的值。如果沒有主動調用 return 命令,默認返回為 0。

下面舉例說明 "$*" 和 "$@" 的差異。假設有一個 testparams.sh 腳本,內容如下:

#!/bin/bash

for arg in "$*"; do
    echo "****:" $arg
done
echo --------------
for arg in "$@"; do
    echo "@@@@:" $arg
done

這個腳本分別遍歷 "$*" 和 "$@" 擴展后的內容,并打印出來。執(zhí)行 ./testparams.sh,結果如下:

$ ./testparams.sh This is a test
****: This is a test
--------------
@@@@: This
@@@@: is
@@@@: a
@@@@: test

可以看到,"$*" 只產(chǎn)生一個字符串,for 循環(huán)只遍歷一次。
而 "$@" 產(chǎn)生了多個字符串,for 循環(huán)遍歷多次,是一個字符串參數(shù)數(shù)組。

注意:如果傳入的參數(shù)多于 9 個,則不能使用 $10 來引用第 10 個參數(shù),而是要用 ${10} 來引用。即,需要用大括號{}把大于 9 的數(shù)字括起來。

例如,${10} 表示獲取第 10 個參數(shù)的值,寫為 $10 獲取不到第 10 個參數(shù)的值。實際上,$10 相當于 ${1}0,也就是先獲取 $1 的值,后面再跟上 0,如果 $1 的值是 "first",則 $10 的值是 "first0"。

查看 man bash 里面對位置參數(shù)(positional parameters)的說明如下:

Positional Parameters
A positional parameter is a parameter denoted by one or more digits, other than the single digit 0.

Positional parameters are assigned from the shell's arguments when it is invoked, and may be reassigned using the set builtin command. Positional parameters may not be assigned to with assignment statements. The positional parameters are temporarily replaced when a shell function is executed.
When a positional parameter consisting of more than a single digit is expanded, it must be enclosed in braces.

即,最后一句提到,當位置參數(shù)由多位數(shù)字組成時,需要用大括號 {} 把多位數(shù)字括起來。

獲取位置參數(shù)的個數(shù)

在 bash 中,可以使用 $# 來獲取傳入的命令行或者傳入函數(shù)的參數(shù)個數(shù)。

要注意的是,$# 統(tǒng)計的參數(shù)個數(shù)不包括腳本自身名稱或者函數(shù)名稱。

例如,執(zhí)行 ./a.sh a b,則 $# 是 2,而不是 3。

查看 man bash 的說明如下:

Special Parameters
# Expands to the number of positional parameters in decimal.

可以看到,$# 實際上是擴展為位置參數(shù)(positional parameters)的個數(shù),統(tǒng)計的參數(shù)不包括 $0。

分享到:
標簽:Bash
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定