簡體   English   中英

[[:upper:]]和[:upper:](bash)有什么區別?

[英]What's the difference between [[:upper:]] and [:upper:] (bash)?

所以我在macOS High Sierra 10.13.6下使用bash 3.2.57(1)-release,我試圖編寫一個bash腳本,要求不區分大小寫。 我讀到使用tr "[:upper:]" "[:lower:]" <<< "$(echo AaBbCcDd)"會將整個字符串轉換為小寫。 但是,我在其他地方讀過使用'[[:UPPER:]]''[[:LOWER:]]'代替。 這些似乎仍然有效,但是讓我感到奇怪的是,這兩者之間有什么區別嗎?

在正則表達式中, [[:upper:]]表示“任何大寫字母”。 但這是更通用機制的一個實例。 外括號[…]和內括號冒號[:…:]具有不同的含義。 外括號包圍一個字符集 在字符集中,您可以使用方括號語法使用單個字符,范圍如2-9以及字符類 例如,正則表達式[2-9_[:upper:]]匹配2到9之間的任何大寫字母,下划線或數字。

tr替換單個字符,而不替換正則表達式。 (還有另一種替換正則表達式的工具:sed。)其參數是字符集,即放在括號內的字符。

tr '2-9_[:upper:]' 'X'

相當於

sed 's/[2-9_[:upper:]]/X/g'

您可以編寫類似tr '[[:upper:]]' '[[:lower:]]' ,其效果與tr '[:upper:]' '[:lower:]' 但這不是因為外括號有任何特殊含義。 這是因為您要用[替換[[ ,大寫字母用相應的小寫字母, ]]替換。 單獨更換支架無效。

(順便說一下,bash 4具有內置的大小寫轉換機制: all_uppercase=${var^^}; all_lowercase=${var,,} 。但這在bash 3中不存在,這是Apple提供的功能。 macOS。要獲取bash 4,您需要第三方分發,例如Br​​ew。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM