Bash 腳本中的特殊變量

在 Bash 腳本和命令行中,?特殊變量?(Special Variables)主要用于獲取腳本或命令的上下文信息,如參數、進程狀態、返回值等。以下是常見的特殊變量及其典型應用場景:


?1. 腳本參數處理?

$0$1$2?...?$9${10}...

  • ?作用?:獲取腳本或函數的參數。
  • ?典型用途?:
    # script.sh
    echo "腳本名稱: $0"
    echo "第一個參數: $1"
    echo "第二個參數: $2"
    ?運行示例?:
    ./script.sh hello world
    ?輸出?:
    腳本名稱: ./script.sh
    第一個參數: hello
    第二個參數: world

$#

  • ?作用?:獲取傳遞給腳本或函數的參數個數。
  • ?典型用途?:
    if [ $# -eq 0 ]; thenecho "錯誤:請提供參數!"exit 1
    fi

$*?和?$@

  • ?作用?:獲取所有參數。
    • $*:所有參數合并成一個字符串("$1 $2 $3 ...")。
    • $@:每個參數單獨處理("$1" "$2" "$3" ...),適用于循環遍歷。
  • ?典型用途?:
    for arg in "$@"; doecho "參數: $arg"
    done

?2. 進程和返回值?

$$

  • ?作用?:獲取當前 Shell 或腳本的 ?PID(進程 ID)?
  • ?典型用途?:
    echo "當前進程 ID: $$"
    ?輸出?:
    當前進程 ID: 12345

$?

  • ?作用?:獲取 ?上一條命令的退出狀態碼?(0 表示成功,非 0 表示失敗)。
  • ?典型用途?:
    grep "keyword" file.txt
    if [ $? -ne 0 ]; thenecho "未找到 keyword!"
    fi
    或者:
    command || echo "命令執行失敗!"

$!

  • ?作用?:獲取 ?最后一個后臺運行的進程 PID
  • ?典型用途?:
    sleep 10 &
    echo "后臺進程 PID: $!"

?3. 腳本自身信息?

$0

  • ?作用?:獲取 ?腳本名稱或 Shell 名稱
  • ?典型用途?:
    echo "當前腳本: $0"
    ?輸出?:
    當前腳本: ./test.sh

$_

  • ?作用?:獲取 ?上一個命令的最后一個參數
  • ?典型用途?:
    ls /usr/bin
    echo "上一個命令的最后一個參數: $_"
    ?輸出?:
    /usr/bin
    上一個命令的最后一個參數: /usr/bin

?4. 通配符和擴展?

$*?和?$@(在雙引號中的區別)

  • ?**"$*"**?:所有參數合并成一個字符串("$1 $2 $3")。
  • ?**"$@"**?:每個參數單獨處理("$1" "$2" "$3"),適用于循環遍歷。
  • ?典型用途?:
    for arg in "$@"; doecho "參數: $arg"
    done

?5. 其他特殊變量?

$RANDOM

  • ?作用?:生成 ?隨機數(0-32767)?
  • ?典型用途?:
    echo "隨機數: $RANDOM"

$SECONDS

  • ?作用?:獲取 ?腳本運行時間(秒)?
  • ?典型用途?:
    sleep 3
    echo "運行時間: $SECONDS 秒"

?總結?

變量作用典型用途
$0腳本名稱獲取當前腳本名
$1-$9腳本參數處理命令行參數
$#參數個數檢查參數數量
$*所有參數(合并)整體處理參數
$@所有參數(獨立)循環遍歷參數
$?上一條命令的返回值檢查命令是否成功
$$當前進程 PID記錄進程 ID
$!最后一個后臺進程 PID管理后臺任務
$_上一個命令的最后一個參數快速引用參數
$RANDOM隨機數生成隨機值
$SECONDS腳本運行時間計時

這些特殊變量在 ?腳本參數處理、錯誤檢查、進程管理、日志記錄? 等場景中非常有用,熟練掌握它們可以大幅提升 Bash 腳本的編寫效率!?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/83306.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/83306.shtml
英文地址,請注明出處:http://en.pswp.cn/web/83306.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

免部署的數字人 API 調用教程:基于 wav2lip模型訓練的開放API,附 PHP 代碼示例

前言 去年我開始研究數字人模型算法,測試了市面上幾乎所有開源數字人模型,過程中踩了不少坑。最大的痛點就是訓練太燒顯卡了,光租顯卡的費用就花了我6個月的薪資,每次看到賬單都心疼。不過現在終于把基于wav2lip的數字人API做出來…

力扣HOT100之貪心算法:45. 跳躍游戲 II

這道題刷代碼隨想錄的時候也刷過,本來以為有了上一題55.跳躍游戲的基礎,這道題會好做一點,但是依舊想不出來思路,回去看了下自己當時寫的博客,沒想到今天的感受和當時的感受都一模一樣。。。What can I say?看了下代碼…

使用Docker申請Let‘s Encrypt證書

1、安裝Docker # 安裝Docker https://docs.docker.com/get-docker/# 安裝Docker Compose https://docs.docker.com/compose/install/# CentOS安裝Docker https://mp.weixin.qq.com/s/nHNPbCmdQs3E5x1QBP-ueA 2、申請Lets Encrypt證書 詳見: https://docs.linuxse…

算法題(167):FBI樹

審題: 本題需要我們將字符串按照題目要求進行遞歸展開,并按照后序遍歷的順序輸出 思路: 方法一:遞歸 首先我們需要模擬一下題目的意思 其實就是第一步判斷屬于什么字符,然后將字符串分兩半進行下一輪判斷。而由于題目要…

從“分散開發”到“智能協同” —— Gitee 如何賦能河南農擔構建金融級研發體系?

河南省農業信貸擔保有限責任公司(以下簡稱「河南農擔」)成立于 2016 年,是河南省屬骨干國有企業,承擔破解“三農”融資難題的重要職責。截至 2024 年底,河南農擔累計實現擔保規模 1037.05 億元,位居全國農擔…

青少年編程與數學 01-011 系統軟件簡介 14 Foxpro數據庫

青少年編程與數學 01-011 系統軟件簡介 14 Foxpro數據庫 一、歷史沿革二、技術架構三、主要功能四、應用場景五、產品版本六、使用方法七、技術價值八、歷史意義全文總結 **摘要:**FoxPro 是一款經典的桌面數據庫管理系統,起源于 1984 年的 FoxBASE&…

android studio向左向右滑動頁面

本文演示了Android Studio中使用ViewPager實現頁面切換的方法。通過創建包含3個頁面的ViewPager示例,詳細展示了實現步驟:1)在XML布局中配置ViewPager和切換按鈕;2)使用LayoutInflater動態加載頁面布局;3)自定義SimplePagerAdapte…

數據可視化新姿勢:Altair的聲明式魔法

文章目錄 一、告別編程式繪圖的苦日子二、5分鐘極速入門安裝篇(記得先備好虛擬環境!)核心三劍客 三、高階玩法揭秘1. 交互功能秒實現2. 復合圖表so easy3. 魔改樣式有套路 四、避坑指南(血淚經驗)五、Altair vs 其他庫…

PostgreSQL --數據庫操作

一、基本操作 1、登錄 #切換pg用戶 su - postgres#重啟服務 pg_ctl -D /usr/local/pgsql/data -l logfile restart#進入pg psql2、數據庫操作 2.1、列出庫 \l\lselect datname from database; \l:輸出比\l多了Size,Tablespace 和 Description 列 :擴展輸…

樹莓派超全系列教程文檔--(63)rpicam-apps可用選項介紹之常用選項

rpicam-apps可用選項介紹之常用選項 rpicam-apps 選項參考常用選項helpversionlist-camerascameraconfigtimeoutpreviewfullscreenqt-previewnopreviewinfo-textwidth 和 heightviewfinder-width 和 viewfinder-heightmode打包格式詳細信息解壓格式詳細信息 viewfinder-modelor…

AI的發展過程:深度學習中的自然語言處理(NLP);大語言模型(LLM)詳解;Transformer 模型結構詳解;大模型三要素:T-P-G 原則

AI的發展過程:深度學習中的自然語言處理(NLP);大語言模型(LLM)詳解;Transformer 模型結構詳解;大模型三要素:T-P-G 原則 AI的發展過程與大模型原理詳解一、AI的發展過程符…

SDXL 和 SDXL-Turbo 的區別

(1) SDXL(Stable Diffusion XL) 標準擴散模型,基于傳統的多步去噪(通常 20~50 步)。 訓練充分,特征更穩定,適合用于特征提取、方向學習(如 LoRA、SAE)。 計算成本高&am…

PyTorch:讓深度學習像搭積木一樣簡單!!!

文章目錄 🚀 一、 PyTorch的王炸:動態圖 vs 靜態圖靜態圖的“痛苦回憶”(前方高能吐槽!)PyTorch動態圖的降維打擊🔥 🔥 二、 不只是靈活!PyTorch的三大殺器1. 張量(Tenso…

LeetCode--27.移除元素

解題思路: 1.獲取信息: 給定一個數組和一個值,刪除數組中等于這個值的值 要求是,返回數組中不等于這個值的數的數目 并且要求在數組上刪除,不能使用額外輔助空間 還是給了評測標準(你可以根據它的原理來實現…

WebRTC(二):工作機制

核心組成 GetUserMedia:獲取本地音視頻設備(攝像頭、麥克風)數據流。RTCPeerConnection:實現點對點的媒體流傳輸和網絡連接管理。RTCDataChannel:點對點的任意數據通道(除音視頻外傳輸數據)。 …

機器學習+城市規劃第十五期:時空地理加權回歸(STGWR)

機器學習城市規劃第十五期:時空地理加權回歸(STGWR) 引言 隨著城市化進程的加速,城市規劃面臨越來越多復雜的挑戰。在傳統的城市規劃中,通常會考慮到地理位置的影響,但往往忽略了時間維度。而在現代城市的…

用虛擬機安裝macos系統之后進入Boot Manager頁面

安裝教程:在VMware中安裝macos系統教程 在VMware中安裝macos系統時啟動后進入Boot Manager界面,通常是由于虛擬機的固件類型設置于鏡像不兼容所致。 解決辦法:虛擬機默認使用UEFI啟動模式,但是部分macos鏡像需要切換到BIOS模式才…

基于API的Redis緩存實現

1.使用Redis API 進行業務數據緩存管理 編寫一個進行業務處理的類ApiCommentService,使用Autowired注解注入Redis API中常用的RedisTemplate(類似于Java基礎API中的JdbcTemplate); 然后在數據查詢、修改和刪除三個方法中,根據業…

前沿論文匯總(機器學習/深度學習/大模型/搜廣推/自然語言處理)

文章目錄 1 前言2 大模型/自然語言處理2.1 FreeAL:在大模型時代實現無需人工的主動學習2.2 COLD:中文攻擊性語言檢測基準2.3 將詞匯的對比信息融入詞嵌入以實現反義詞-同義詞區分2.4 LogRAG:基于檢索增強生成的半監督日志異常檢測2.5 RankRAG…

PP-OCRv5 ubuntu20.04 OCR識別服務

目錄 說明 使用 效果 下載 說明 PP-OCRv5 ubuntu20.04 OCR識別服務 使用 1、下載后解壓 2、進入目錄、運行程序 效果 1、瀏覽器訪問 2、接口調用 下載 方式1 源碼下載 方式2 通過網盤分享的文件:lw.PP_OCRService.tar.gz 鏈接: https://pan.baidu.com…