通過$0可以獲取傳遞來的第一個參數,就是腳本自己,$1可以獲得第二個參數,比如:
- #!/bin/bash
- echo "$0"
- echo "$1"
運行程序
- ./test/sh q
看到:
- $ ./test.sh q
- ./test.sh
- q
傳遞參數的時候,如果是字符串,可以用單引號或者雙引號包起來,表示這是一個完整的參數:
- ./test.sh 'this is a test'
既然扯到雙引號,要注意,如果在雙引號裡使用了變量,也會用其值替換,比如:
- ./test.sh "$HOME"
- ./test.sh
- /home/chenshu
$HOME的值被用來作為第二個參數。
同樣,這裡用上單引號就不會取值。
$* 值得是從第1個參數開始的所有參數,如果沒有指定間隔字符,默認用空格。
比如下面的腳本:
- #!/bin/bash
- echo "$*"
這樣調用:
- ./test.sh 'this is a test' 'abc'
結果顯示為:
- this is a test abc
現在設置一下IFS:
- !/bin/bash
- IFS=^
- echo "$*"
結果顯示為:
- this is a test^abc
如果IFS設置為換行符,需要這樣寫:
- IFS=$'\n'
使用$@基本上和$*一樣,除了IFS設置無效外。
有時候,想知道外部參數的數量,可以用$#
- #!/bin/bash
- IFS=^
- echo "$*"
- echo "$#"
運行腳本:
- ./test.sh 'this is a test' 'abc'
輸出為2,不包含第0個參數。