linux变量中代,linux中shell变量$#,$@,$0,$1,$2和变量${0%/*}
一直傻傻搞不清,還是梳理一下吧。
linux中shell變量$#,$@,$0,$1,$2的含義解釋:
變量說明:
$$
Shell本身的PID(ProcessID)
$!
Shell最后運行的后臺Process的PID
$?
最后運行的命令的結束代碼(返回值)
$-
使用Set命令設定的Flag一覽
$*
所有參數列表。如"$*"用「"」括起來的情況、以"$1 $2 … $n"的形式輸出所有參數。
$@
所有參數列表。如"$@"用「"」括起來的情況、以"$1" "$2" … "$n" 的形式輸出所有參數。
$#
添加到Shell的參數個數
$0
Shell本身的文件名
$1~$n
添加到Shell的各參數值。$1是第1參數、$2是第2參數…。
如果直接在命令行echo $0,則打印的是當前運行的shell名,(如ksh,bash,csh);如果在腳本中,$0表示腳本名稱或函數名稱;
那么
${0%/*}和${0##/*}代表什么?
${0%/*}
以例子來表述:
新建一個目錄——mkdir -p /usr/school/grade/class/
新建一個文件——touch /usr/school/grade/class/student
在student文件里寫上代碼并保存——
echo $0
echo ${0#*/}
echo ${0##*/}
運行代碼—— sh /usr/school/grade/class/student
我們會得到三個結果分別是
/usr/school/grade/class/student
usr/school/grade/class/student
student
這個時候再來講解那三條指令
$0,$1,$2 前面有一個$美元符號的,都象征著變量,而$0象征本身shell腳本文件的名字,也就是 /usr/school/grade/class/student
最右邊的 / ,象征著你要尋找,你要匹配的東西,在哪里找呢?在文件名字 /usr/school/grade/class/student 里面找
#象征要尋找最左邊的/
##象征要尋找最右邊的/
而*是通配符,象征著任意長度的字符串
所以在##條件下的 */ , 就象征著/usr/school/grade/class/這一段
找到了這一段之后,就把它截取,扔掉,剩下的就是student這個文件名字
所以 ${0##*/} 的作用是尋找一個路徑下的具體文件名字
/usr/school/grade/class/student,就得到 student
${0%/*}##
#是從左邊頭部開始尋找起,%是從尾部開始尋找起(If the pattern matches a trailing portion)
${0%/*} 這個命令,對于/usr/school/grade/class/student,從右邊找起,得到是 /student 這個部分,然后扔掉
如果是${0%%/*},找到的就是 /usr/school/grade/class/student
綜上所述
對于同一個文件 /usr/school/grade/class/student
${0%/*}得到前面/usr/school/grade/class
${0##*/}得到的是后面 student
總結
以上是生活随笔為你收集整理的linux变量中代,linux中shell变量$#,$@,$0,$1,$2和变量${0%/*}的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 访问磁盘bin,zabbix
- 下一篇: 七天入门linux,一个Linux新手的