欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

shell特殊位置變量的問題小結

 更新時間:2025年01月21日 10:25:58   作者:躺不平的理查德  
這篇文章介紹了一些在Shell腳本中常用的特殊位置變量,如$n, $0, $#等,并詳細解釋了它們的功能和用法,感興趣的朋友跟隨小編一起看看吧

1.特殊位置變量 $n

  • $n:表示傳遞給腳本或函數的第 n 個參數。
  • $1:第一個參數
  • $2:第二個參數
  • ...
  • $9:第九個參數
  • 超過 9 個參數時,需要用 {},例如 ${10} 表示第十個參數。

2.特殊位置變量 $0

 $0:表示腳本的文件名或當前命令的名稱或者腳本路徑

#!/bin/bash
echo "腳本名是:$0"
#bash myscript.sh
#腳本名是:myscript.sh

$0獲取腳本路徑

#!/bin/bash
# 使用 dirname 提取腳本目錄
script_dir=$(dirname "$0")
# 輸出腳本目錄
echo "腳本目錄是:$script_dir"

dirname $0 的作用:

  • 提取 $0 表示的腳本路徑中的目錄部分。
  • 當使用相對路徑調用腳本時,dirname $0 的結果也是相對路徑
  • 相對路徑:如果你通過相對路徑調用腳本,比如 ./script.sh,那么 dirname "$0" 會返回 .,表示當前目錄。
  • 絕對路徑:如果通過絕對路徑調用腳本,dirname "$0" 會返回腳本所在的絕對目錄。

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.特殊位置變量$ #

$# 表示傳遞給腳本的參數數量,即位置參數的個數。

#!/bin/bash
echo "傳遞給腳本的參數個數是:$#"
#bash script.sh 1 2 3
#傳遞給腳本的參數個數是:3
#bash script.sh "1 2" 3
#傳遞給腳本的參數個數是:2
#bash script.sh {a..z}
#傳遞給腳本的參數個數是:26

4.特殊位置變量$*/$@

  • $*:將所有參數視為一個單一的字符串。
  • $@:將每個參數視為獨立的字符串,特別是當參數包含空格時,區(qū)別更加明顯。

4.1 $*

  • $* 將所有傳遞給腳本的參數視為一個單一的字符串,并且各個參數之間會用空格分隔。
  • 沒有雙引號時,$* 會將所有參數當作一個單一的字符串處理,但它會按照空格拆分參數
#!/bin/bash
echo "使用 \$* 時:"
for i in $*; do
  echo "[$i]"
done
bash test.sh "Hello world" arg2 "this is" arg4
$* 會將所有參數當作一個單一的字符串處理,但它會按照空格拆分參數。因此,"Hello world" 被拆成了 Hello 和 world,"this is" 被拆成了 this 和 is。
使用 $* 時:
[Hello]
[world]
[arg2]
[this]
[is]
[arg4]

加上雙引號時,"$*" 會把所有的參數當成一個整體,但依然會將參數之間用一個空格隔開。

#!/bin/bash
echo "使用 \"\$*\" 時:"
for i in "$*"; do
  echo "[$i]"
done
使用 "$*" 時:
[Hello world arg2 this is arg4]
當加上雙引號時,"$*" 將所有參數當作一個完整的單一字符串來處理,并用空格分隔。這樣,整個輸入變成了一個大字符串 Hello world arg2 this is arg4。

4.2 $@

$@ 也表示所有傳遞給腳本的參數,但它會將每個參數作為一個獨立的字符串,尤其是當參數包含空格時,會將每個參數保留為單獨的字符串。

沒有雙引號時,$@ 會和 $* 相似地將每個參數當作一個獨立的部分,參數之間也會用空格分隔。與$*不加雙引號行為相同

#!/bin/bash
echo "使用 \$@ 時:"
for i in $@; do
  echo "[$i]"
done
#輸出
使用 $@ 時:
[Hello]
[world]
[arg2]
[this]
[is]
[arg4]

加上雙引號時,"$@" 會讓每個參數保持獨立,即使參數中有空格,也不會被拆開。

#!/bin/bash
echo "使用 \"\$@\" 時:"
for i in "$@"; do
  echo "[$i]"
done
使用 "$@" 時:
[Hello world]
[arg2]
[this is]
[arg4]
當加上雙引號時,"$@" 會保留每個參數作為獨立的字符串。即使參數中包含空格(如 "Hello world"),它也會將整個 "Hello world" 作為一個參數處理,不會拆分。每個參數都保持獨立性。

5.shift 命令

shift 用來將位置參數向左移動,參數的數量會減少,原來的 $1 會被移除,新的 $2 變成 $1,依此類推。

#!/bin/bash
# 打印所有傳遞的參數
echo "原始參數:$@"
# 移動參數
shift
# 打印移位后的參數
echo "移位后的參數:$@"

可以使用 shift 多次,以進一步移動參數:

#!/bin/bash
shift 2
echo "移位兩次后的參數:$@"
bash script.sh arg1 arg2 arg3 arg4

到此這篇關于shell特殊位置變量的文章就介紹到這了,更多相關shell特殊位置變量內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Shell腳本的條件測試和if條件語句使用方法

    Shell腳本的條件測試和if條件語句使用方法

    這篇文章主要介紹了Shell腳本的條件測試和if條件語句使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-11-11
  • shell 字符串操作(長度,查找,替換)詳解

    shell 字符串操作(長度,查找,替換)詳解

    在做shell批處理程序時候,經常會涉及到字符串相關操作。有很多命令語句,如:awk,sed都可以做字符串各種操作。其實shell內置一系列操作符號,可以達到類似效果,大家知道,使用內部操作符會省略啟動外部程序等時間,因此速度會非常的快
    2012-09-09
  • Linux啟動過程詳細介紹

    Linux啟動過程詳細介紹

    這篇文章主要介紹了Linux啟動過程詳細介紹的相關資料,需要的朋友可以參考下
    2017-06-06
  • Shell中的循環(huán)語句for、while、until實例講解

    Shell中的循環(huán)語句for、while、until實例講解

    這篇文章主要介紹了Shell中的循環(huán)語句for、while、until實例講解,簡單清晰明了,非常不錯的教程,需要的朋友可以參考下
    2014-06-06
  • linux啟動級別的含義(init 0-6)

    linux啟動級別的含義(init 0-6)

    這篇文章主要介紹了linux啟動級別的含義(init 0-6),需要的朋友可以參考下
    2014-02-02
  • linux 查看端口占用命令實例詳解

    linux 查看端口占用命令實例詳解

    這篇文章主要介紹了 linux 查看端口占用命令實例詳解的相關資料,教大家怎樣查看系統(tǒng)端口占用情況,需要的朋友可以參考下
    2017-07-07
  • Linux下的fdisk指令用法場景分析

    Linux下的fdisk指令用法場景分析

    在Linux系統(tǒng)中,對磁盤進行分區(qū)是管理和利用磁盤空間的重要任務之一,本篇將以通俗易懂的方式,詳細介紹fdisk指令的前世今生、功能、用法和應用場景,幫助讀者全面了解fdisk指令,并掌握其在磁盤管理和問題排查方面的應用,需要的朋友可以參考下
    2024-01-01
  • linux系統(tǒng)下用.sh文件執(zhí)行python命令的方法

    linux系統(tǒng)下用.sh文件執(zhí)行python命令的方法

    這篇文章主要給大家介紹了關于linux系統(tǒng)下用.sh文件執(zhí)行python命令的相關資料,文中通過實例代碼介紹的非常詳細,對大家學習或者使用python具有一定的參考學習價值,需要的朋友可以參考下
    2022-07-07
  • linux 中grep 匹配制表符 和 換行符的命令

    linux 中grep 匹配制表符 和 換行符的命令

    這篇文章主要介紹了linux 中grep 匹配制表符 和 換行符的命令,需要的朋友可以參考下
    2018-07-07
  • 使用Systemctl列出Linux中所有服務的操作步驟

    使用Systemctl列出Linux中所有服務的操作步驟

    在 Linux 系統(tǒng)中,Systemctl 是一個強大的工具,用于管理系統(tǒng)的服務和守護進程,它可以讓用戶輕松地啟動、停止、重啟以及管理各種系統(tǒng)服務,本文將詳細介紹如何使用 Systemctl 來列出 Linux 中的所有服務,需要的朋友可以參考下
    2024-05-05

最新評論