bash shell 中如何區分 $()和${}和$(())和(())
#在 bash shell 中,$( ) 與 ` ` (反引號) 都是用來做指令取代用(command substitution)的。而 $( ) 不見的每一種 shell 都能使用,若你用 bash2 的話,一定沒問題...
看 ${ } 吧... 它其實就是用來做變數替換用的啦。一般情況下,$var 與 ${var} 並沒有啥不一樣。但是用 ${ } 會比較精確的界定變數名稱的範圍。
我這裡再用一些範例來說明 ${ } 的一些特異功能:
假設我們定義了一個變數為:
file=/dir1/dir2/dir3/my.file.txt
我們可以用 ${ } 分別替換得到不同的值:
${file#*/}:拿掉第一 / 及其左邊的字串:dir1/dir2/dir3/my.file.txt
${file##*/}:拿掉最後一條 / 及其左邊的字串:my.file.txt
${file#*.}:拿掉第一個 . 及其左邊的字串:file.txt
${file##*.}:拿掉最後一個 . 及其左邊的字串:txt
${file%/*}:拿掉最後一則 / 及其右邊的字串:/dir1/dir2/dir3##
#${file%%/*}:拿掉第一個 / 及其右邊的字串:(空值)${file%.*}:拿掉最後一個 . 及其右邊的字串:/dir1/dir2/dir3/my.file#${file%%.*}:拿掉第一個 . 及其右邊的字串:/dir1/dir2/dir3/my
% 是去掉右邊(在鑑盤上 % 在 $ 之右邊)
單一符號是最小匹配﹔兩個符號是最大匹配。
${file:0:5}:提取最左邊的 5 個位元組:/dir1
${file:5:5}:提取第 5 個位元組右邊的連續 5 個位元組:/dir2
我們也可以對變數值裡的字串作替換:
${file/dir/path}:將第一個 dir 轉換為 path:/
path1/dir2/dir3/my.file.txt#${file//dir/path}:全部 dir 轉換為 path:/
path1/path2/path3/my.file.txt
利用 ${ } 也可針對不同的變數狀態賦值(沒設定、空值、非空值):
${file-my.file.txt} :假如 $file 沒有設定,則使用 my.file.txt 作傳回值。 (空值及非空值時不作處理)
${file:-my.file.txt} :假如 $file 沒有設定或為空值,則使用my.file.txt 作傳回值。 (非空值時不作處理)
${file my.file.txt} :假如 $file 設為空值或非空值,皆使用my.file.txt作傳回值。 (沒設定時不作處理)
${file: my.file.txt} :若 $file 為非空值,則使用 my.file.txt 作傳回值。 (沒設定及空值時不作處理)
${file=my.file.txt} :若 $file 沒設定,則使用 my.file.txt 作傳回值,同時將 $file 賦值為 my.file.txt 。 (空值及非空值時不作處理)
${file:=my.file.txt} :若$file沒設定或為空值,則使用my.file.txt作傳回值,同時將 $file 賦值為my.file.txt 。 (非空值時不作處理)
${file?my.file.txt} :若 $file 沒設定,則將 my.file.txt 輸出至STDERR。 (空值及非空值時不作處理)
${file:?my.file.txt} :若 $file 沒有設定或為空值,則將 my.file.txt 輸出至 STDERR。 (非空值時不作處理)
以上的理解在於, 你一定要分清楚 unset 與 null 及 non-null 這三種賦值狀態.
一般而言, : 與 null 有關, 若不帶 : 的話, null 不受影響, 若帶 : 則連null 也受影響.
還有哦,${#var} 可計算變數值的長度:
${#file} 可得到 27 ,因為 /dir1/dir2/dir3/my.file.txt 剛好是 27 個位元組...
它是用來作整數運算的。
在 bash 中,$(( )) 的整數運算符號大致上有這些:
- * / :分別為 "加、減、乘、除"。
% :餘數運算
& | ^ !:分別為 "AND、OR、XOR、NOT" 運算。
舉例:
wangnc>a=5;b=7;c=2;
wangnc>echo $a $b
5 7
wangnc>echo $(( a b*c))
19
wangnc>echo $(((a*b)/c))
17
wangnc>echo $(($a $b*$c))
19
wangnc>
在 $(( )) 中的變數名稱,可於其前面加 $ 符號來替換,也可以不用,如:
$(( $a $b * $c)) 也可得到 19 的結果
此外,$(( )) 還可作不同進位(如二進位、八進位、十六進位)作運算呢,只是,輸出結果皆為十進位而已:
echo $((16#2a)) 結果為 42 (16進位轉十進位)
(())的用途:
事實上,單純用 (( )) 也可重定義變數值,或作 testing:
a=5; ((a )) 可將 $a 重新定義為 6
a=5; ((a--)) 則為 a=4
a=5; b=7; ((a < b)) 會得到 0 (true) 的回傳值。
常見的用於 (( )) 的測試符號有如下這些:
<:小於 >:大於
<=:小於或等於 >=:大於或等於
==:等於
!=:不等於
以上是bash shell 中如何區分 $()和${}和$(())和(())的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

VS Code 系統要求:操作系統:Windows 10 及以上、macOS 10.12 及以上、Linux 發行版處理器:最低 1.6 GHz,推薦 2.0 GHz 及以上內存:最低 512 MB,推薦 4 GB 及以上存儲空間:最低 250 MB,推薦 1 GB 及以上其他要求:穩定網絡連接,Xorg/Wayland(Linux)

VS Code擴展安裝失敗的原因可能包括:網絡不穩定、權限不足、系統兼容性問題、VS Code版本過舊、殺毒軟件或防火牆干擾。通過檢查網絡連接、權限、日誌文件、更新VS Code、禁用安全軟件以及重啟VS Code或計算機,可以逐步排查和解決問題。

雖然 Notepad 無法直接運行 Java 代碼,但可以通過借助其他工具實現:使用命令行編譯器 (javac) 編譯代碼,生成字節碼文件 (filename.class)。使用 Java 解釋器 (java) 解釋字節碼,執行代碼並輸出結果。

Linux系統的五個基本組件是:1.內核,2.系統庫,3.系統實用程序,4.圖形用戶界面,5.應用程序。內核管理硬件資源,系統庫提供預編譯函數,系統實用程序用於系統管理,GUI提供可視化交互,應用程序利用這些組件實現功能。

VS Code 可以在 Mac 上使用。它具有強大的擴展功能、Git 集成、終端和調試器,同時還提供了豐富的設置選項。但是,對於特別大型項目或專業性較強的開發,VS Code 可能會有性能或功能限制。

Visual Studio Code (VSCode) 是一款跨平台、開源且免費的代碼編輯器,由微軟開發。它以輕量、可擴展性和對眾多編程語言的支持而著稱。要安裝 VSCode,請訪問官方網站下載並運行安裝程序。使用 VSCode 時,可以創建新項目、編輯代碼、調試代碼、導航項目、擴展 VSCode 和管理設置。 VSCode 適用於 Windows、macOS 和 Linux,支持多種編程語言,並通過 Marketplace 提供各種擴展。它的優勢包括輕量、可擴展性、廣泛的語言支持、豐富的功能和版

要查看 Git 倉庫地址,請執行以下步驟:1. 打開命令行並導航到倉庫目錄;2. 運行 "git remote -v" 命令;3. 查看輸出中的倉庫名稱及其相應的地址。

VS Code 全稱 Visual Studio Code,是一個由微軟開發的免費開源跨平台代碼編輯器和開發環境。它支持廣泛的編程語言,提供語法高亮、代碼自動補全、代碼片段和智能提示等功能以提高開發效率。通過豐富的擴展生態系統,用戶可以針對特定需求和語言添加擴展程序,例如調試器、代碼格式化工具和 Git 集成。 VS Code 還包含直觀的調試器,有助於快速查找和解決代碼中的 bug。
