shell特殊位置變量的問(wèn)題小結(jié)
1.特殊位置變量 $n
$n
:表示傳遞給腳本或函數(shù)的第n
個(gè)參數(shù)。$1
:第一個(gè)參數(shù)$2
:第二個(gè)參數(shù)- ...
$9
:第九個(gè)參數(shù)- 超過(guò) 9 個(gè)參數(shù)時(shí),需要用
{}
,例如${10}
表示第十個(gè)參數(shù)。
2.特殊位置變量 $0
$0
:表示腳本的文件名或當(dāng)前命令的名稱或者腳本路徑
#!/bin/bash echo "腳本名是:$0" #bash myscript.sh #腳本名是:myscript.sh
$0獲取腳本路徑
#!/bin/bash # 使用 dirname 提取腳本目錄 script_dir=$(dirname "$0") # 輸出腳本目錄 echo "腳本目錄是:$script_dir"
dirname $0 的作用:
- 提取 $0 表示的腳本路徑中的目錄部分。
- 當(dāng)使用相對(duì)路徑調(diào)用腳本時(shí),
dirname $0
的結(jié)果也是相對(duì)路徑 - 相對(duì)路徑:如果你通過(guò)相對(duì)路徑調(diào)用腳本,比如
./script.sh
,那么dirname "$0"
會(huì)返回.
,表示當(dāng)前目錄。 - 絕對(duì)路徑:如果通過(guò)絕對(duì)路徑調(diào)用腳本,
dirname "$0"
會(huì)返回腳本所在的絕對(duì)目錄。
basename $0作用:
- 提取路徑中的文件名部分。
- 從
$0
的值中移除路徑部分,只返回文件名。
#!/bin/bash # 獲取腳本的完整路徑 #script_path=$(readlink -f "$0") # 提取目錄和名稱 script_dir=$(dirname "$0") script_name=$(basename "$0") echo "腳本目錄是:$script_dir" echo "腳本名稱是:$script_name"
3.特殊位置變量$ #
$#
表示傳遞給腳本的參數(shù)數(shù)量,即位置參數(shù)的個(gè)數(shù)。
#!/bin/bash echo "傳遞給腳本的參數(shù)個(gè)數(shù)是:$#" #bash script.sh 1 2 3 #傳遞給腳本的參數(shù)個(gè)數(shù)是:3 #bash script.sh "1 2" 3 #傳遞給腳本的參數(shù)個(gè)數(shù)是:2 #bash script.sh {a..z} #傳遞給腳本的參數(shù)個(gè)數(shù)是:26
4.特殊位置變量$*/$@
$*
:將所有參數(shù)視為一個(gè)單一的字符串。$@
:將每個(gè)參數(shù)視為獨(dú)立的字符串,特別是當(dāng)參數(shù)包含空格時(shí),區(qū)別更加明顯。
4.1 $*
$*
將所有傳遞給腳本的參數(shù)視為一個(gè)單一的字符串,并且各個(gè)參數(shù)之間會(huì)用空格分隔。- 沒(méi)有雙引號(hào)時(shí),
$*
會(huì)將所有參數(shù)當(dāng)作一個(gè)單一的字符串處理,但它會(huì)按照空格拆分參數(shù)
#!/bin/bash echo "使用 \$* 時(shí):" for i in $*; do echo "[$i]" done bash test.sh "Hello world" arg2 "this is" arg4 $* 會(huì)將所有參數(shù)當(dāng)作一個(gè)單一的字符串處理,但它會(huì)按照空格拆分參數(shù)。因此,"Hello world" 被拆成了 Hello 和 world,"this is" 被拆成了 this 和 is。 使用 $* 時(shí): [Hello] [world] [arg2] [this] [is] [arg4]
加上雙引號(hào)時(shí),"$*"
會(huì)把所有的參數(shù)當(dāng)成一個(gè)整體,但依然會(huì)將參數(shù)之間用一個(gè)空格隔開(kāi)。
#!/bin/bash echo "使用 \"\$*\" 時(shí):" for i in "$*"; do echo "[$i]" done 使用 "$*" 時(shí): [Hello world arg2 this is arg4] 當(dāng)加上雙引號(hào)時(shí),"$*" 將所有參數(shù)當(dāng)作一個(gè)完整的單一字符串來(lái)處理,并用空格分隔。這樣,整個(gè)輸入變成了一個(gè)大字符串 Hello world arg2 this is arg4。
4.2 $@
$@
也表示所有傳遞給腳本的參數(shù),但它會(huì)將每個(gè)參數(shù)作為一個(gè)獨(dú)立的字符串,尤其是當(dāng)參數(shù)包含空格時(shí),會(huì)將每個(gè)參數(shù)保留為單獨(dú)的字符串。
沒(méi)有雙引號(hào)時(shí),$@
會(huì)和 $*
相似地將每個(gè)參數(shù)當(dāng)作一個(gè)獨(dú)立的部分,參數(shù)之間也會(huì)用空格分隔。與$*不加雙引號(hào)行為相同
#!/bin/bash echo "使用 \$@ 時(shí):" for i in $@; do echo "[$i]" done #輸出 使用 $@ 時(shí): [Hello] [world] [arg2] [this] [is] [arg4]
加上雙引號(hào)時(shí),"$@"
會(huì)讓每個(gè)參數(shù)保持獨(dú)立,即使參數(shù)中有空格,也不會(huì)被拆開(kāi)。
#!/bin/bash echo "使用 \"\$@\" 時(shí):" for i in "$@"; do echo "[$i]" done 使用 "$@" 時(shí): [Hello world] [arg2] [this is] [arg4] 當(dāng)加上雙引號(hào)時(shí),"$@" 會(huì)保留每個(gè)參數(shù)作為獨(dú)立的字符串。即使參數(shù)中包含空格(如 "Hello world"),它也會(huì)將整個(gè) "Hello world" 作為一個(gè)參數(shù)處理,不會(huì)拆分。每個(gè)參數(shù)都保持獨(dú)立性。
5.shift 命令
shift
用來(lái)將位置參數(shù)向左移動(dòng),參數(shù)的數(shù)量會(huì)減少,原來(lái)的 $1
會(huì)被移除,新的 $2
變成 $1
,依此類推。
#!/bin/bash # 打印所有傳遞的參數(shù) echo "原始參數(shù):$@" # 移動(dòng)參數(shù) shift # 打印移位后的參數(shù) echo "移位后的參數(shù):$@"
可以使用 shift
多次,以進(jìn)一步移動(dòng)參數(shù):
#!/bin/bash shift 2 echo "移位兩次后的參數(shù):$@" bash script.sh arg1 arg2 arg3 arg4
到此這篇關(guān)于shell特殊位置變量的文章就介紹到這了,更多相關(guān)shell特殊位置變量?jī)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Shell腳本的條件測(cè)試和if條件語(yǔ)句使用方法
這篇文章主要介紹了Shell腳本的條件測(cè)試和if條件語(yǔ)句使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11shell 字符串操作(長(zhǎng)度,查找,替換)詳解
在做shell批處理程序時(shí)候,經(jīng)常會(huì)涉及到字符串相關(guān)操作。有很多命令語(yǔ)句,如:awk,sed都可以做字符串各種操作。其實(shí)shell內(nèi)置一系列操作符號(hào),可以達(dá)到類似效果,大家知道,使用內(nèi)部操作符會(huì)省略啟動(dòng)外部程序等時(shí)間,因此速度會(huì)非常的快2012-09-09Shell中的循環(huán)語(yǔ)句for、while、until實(shí)例講解
這篇文章主要介紹了Shell中的循環(huán)語(yǔ)句for、while、until實(shí)例講解,簡(jiǎn)單清晰明了,非常不錯(cuò)的教程,需要的朋友可以參考下2014-06-06linux啟動(dòng)級(jí)別的含義(init 0-6)
這篇文章主要介紹了linux啟動(dòng)級(jí)別的含義(init 0-6),需要的朋友可以參考下2014-02-02linux系統(tǒng)下用.sh文件執(zhí)行python命令的方法
這篇文章主要給大家介紹了關(guān)于linux系統(tǒng)下用.sh文件執(zhí)行python命令的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-07-07linux 中g(shù)rep 匹配制表符 和 換行符的命令
這篇文章主要介紹了linux 中g(shù)rep 匹配制表符 和 換行符的命令,需要的朋友可以參考下2018-07-07使用Systemctl列出Linux中所有服務(wù)的操作步驟
在 Linux 系統(tǒng)中,Systemctl 是一個(gè)強(qiáng)大的工具,用于管理系統(tǒng)的服務(wù)和守護(hù)進(jìn)程,它可以讓用戶輕松地啟動(dòng)、停止、重啟以及管理各種系統(tǒng)服務(wù),本文將詳細(xì)介紹如何使用 Systemctl 來(lái)列出 Linux 中的所有服務(wù),需要的朋友可以參考下2024-05-05