linux 星號 通配符,如何在bash中轉義通配符/星號字符?

簡短的回答

像其他人所說的那樣 - 你應該總是引用變量來防止奇怪的行為。所以使用echo“$ foo”代替echo $ foo。

長期回答

我確實認為這個例子值得進一步解釋,因為它的表面看起來比它看起來更多。

我可以看到你的困惑在哪里,因為在你運行你的第一個例子后,你可能會認為shell顯然正在做:參數擴展

文件名擴展

所以從你的第一個例子:me$?FOO="BAR?*?BAR"me$?echo?$FOO

參數擴展后相當于:me$?echo?BAR?*?BAR

文件名擴展后相當于:me$?echo?BAR?file1?file2?file3?file4?BAR

如果只輸入echo BAR * BAR命令行,您將看到它們是等效的。

所以你可能會想到“如果我逃避*,我可以阻止文件名擴展”

所以從你的第二個例子:me$?FOO="BAR?\*?BAR"me$?echo?$FOO

參數擴展后應相當于:me$?echo?BAR?\*?BAR

文件名擴展后應相當于:me$?echo?BAR?\*?BAR

如果您嘗試直接在命令行中鍵入“echo BAR \ * BAR”,它將確實打印“BAR * BAR”,因為轉義會阻止文件名擴展。

那么為什么使用$ foo不起作用?

這是因為發生了第三次擴張 - 報價清除。從bash手冊中刪除引用是:在前面的擴展之后,所有未引用的字符“\”,“”和“”的出現都將被刪除,這些字符不是由上述擴展之一產生的。

所以當你直接在命令行輸入命令時,轉義字符不是先前擴展的結果,所以BASH在將它發送到echo命令之前將其刪除,但在第二個例子中,“\ *”是先前參數擴展的結果,因此不會被刪除。結果,echo收到“\ *”,這就是它打印的內容。

請注意第一個示例之間的差異 - “*”不包括在將被刪除的字符中刪除的字符中。

我希望這是有道理的。最后得出的結論 - 只是使用引號。我只是想我會解釋為什么轉義,如果只有參數和文件名擴展在起作用,它在邏輯上應該起作用,不起作用。

有關BASH擴展的完整說明,請參閱:

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

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

相關文章

PYTHON面試

大部分的面試問題,有最近要找事的老鐵嗎?python語法以及其他基礎部分可變與不可變類型; 淺拷貝與深拷貝的實現方式、區別;deepcopy如果你來設計,如何實現; __new__() 與 __init__()的區別; 你知…

vs怎么更改編譯的堆空間_再見吧 buildSrc, 擁抱 Composing builds 提升 Android 編譯速度...

前言長期以來困擾我們的一個問題就是構建速度,AndroidStudio 的構建速度嚴重影響 Android 開發者的工作效率,尤其是更新一個版本號,導致整個項目重新構建,在網絡慢的情況下,這是無法忍受的。buildSrc 這種方式&#xf…

java map的遍歷

轉載地址:http://www.cnblogs.com/shenliang123/archive/2012/08/28/2660705.html -------------------------------------------------------------------------------------------------------------------- java中的遍歷 import java.util.Collection; import j…

python循環for...in_python循環while和forin實例

python 循環while和for in簡單實例#!/uer/bin/env python# _*_ coding: utf-8 _*_lucknumber 5b 0while b <3:print(guss count:,b)a int(input(you guse number))if a > lucknumber:print (youaerbiger)elif a lucknumber:print (youare righet)break #跳出這個層級…

android懸浮功能實現,Android實現系統級懸浮按鈕

本文實例為大家分享了Android系統級懸浮按鈕的具體代碼&#xff0c;供大家參考&#xff0c;具體內容如下具體的需求1、就是做一個系統級的懸浮按鈕&#xff0c;就像iPhone 桌面的那個懸浮按鈕效果一樣&#xff0c;能隨意拖動&#xff0c;并且手一放開&#xff0c;懸浮按鈕就自動…

oracle decode_錯過血虧!一文搞懂Oracle鎖相關視圖及相關操作

本文主要研究鎖的相關視圖&#xff0c;以及鎖的相關操作&#xff0c;通過視圖查鎖的問題。 一、v$transaction視圖第一個視圖是v$transaction&#xff0c;就是Oracle數據庫所有活動的事務數&#xff0c;所有活動的事務每一個活動的事務在這里有一行。v$transactionXIDUSN表示當…

Linux文件系統與命令行

什么是命令行? 接收鍵盤命令并將其傳給操作系統執行的程序(用于輸入和管理命令的程序),統稱命令行,也叫: Shell&#xff0c;幾乎所有Linux發行版都提供了一個 Shell 程序,叫做: Bash (Bourne-Again Shell, 因為最初的 Shell 是由 Steve Bourne 編寫的原始 Unix 程序, Again 表…

freeMarker 遍歷 list,map,listmap

List List<String> clientSourceDatanew ArrayList<String>();clientSourceData.add("field字段");clientSourceData.add("title標題");ftl&#xff1a; <#if clientSourceData?exists><#list clientSourceData as key> <tr&g…

qtableview不選中_如何選中/取消選中QTableView并觸發setData()

我有一個自定義的QTableModel&#xff0c;我在PyQt中使用QTableView顯示它。我有一些字段設置為可檢查&#xff0c;我想添加“全部檢查”和“不檢查”按鈕。我覺得應該有一種方法可以使setData()從代碼中被調用&#xff0c;這樣檢查狀態就會改變&#xff0c;就像我已經用setDat…

android 自定義菜單欄,GitHub - earthWo/AndroidBottomNavigation: android 底部菜單欄,自定義樣式,自定義菜單數量,添加滾動動畫和水波紋動畫...

AndroidBottomNavigation截圖使用方法gradle:compile com.whitelife.library:library:1.0.1maven:com.whitelife.librarylibrary1.0pomandroid:id"id/bottom_navigation"android:layout_width"match_parent"android:layout_height"56dp"android:…

windows怎么打開python_windows怎么打開Python

Windows中運行Python的兩種運行方式認識編程環境 1 直接命令行啟用Python。當然&#xff0c;如果直接在cmd中輸入python&#xff0c;需要在windows中的path環境變量中做好設置。 此時&#xff0c;cmd中運行python就可以出現 “>>>” 符號。意味著python進入了交互運行…

sqldeveloper創建賬號_用oralce 自帶工具sql developer 創建表空間,用戶,權限

用oralce 自帶工具sql developer 創建/*第1步&#xff1a;創建臨時表空間 */create temporary tablespace hudongtemptablespacetempfile E:\worksubject\WY-Honda_Ess\Oracle11g\hudongtemptablespace.dbfsize 50mautoextend onnext 50m maxsize 20480mextent management loc…

AOE網與關鍵路徑簡介

前面我們說過的拓撲排序主要是為解決一個工程能否順序進行的問題&#xff0c;但有時我們還需要解決工程完成需要的最短時間問題。如果我們要對一個流程圖獲得最短時間&#xff0c;就必須要分析它們的拓撲關系&#xff0c;并且找到當中最關鍵的流程&#xff0c;這個流程的時間就…

Java 集合體系詳解——List體系有序集合

引言 面向對象語言對事物的體現必然是以對象的形式&#xff0c;Java工程師為了方便多多個對象的操作&#xff0c;就對對象進行存儲&#xff0c;集合就是存儲對象的一種方式&#xff0c;他們的底層都是基于不同的數據結構。當然集合和數組一樣都是容器&#xff0c;數組也是可以存…

android 定義固定數組,Android 圖片數組定義和讀取

位置&#xff1a;packages/apps/Launcher21、圖片數組定義、資源讀取如果有多張圖片&#xff0c;這些圖片的使用與順序無關&#xff0c;可以采取這種方式。drawable-nodpi中有3張圖片&#xff0c;wallpaper_1.jpg、wallpaper_2.jpg、wallpaper_3.jpgXML中定義數組IDwallpaper_1…

alert閃一下就沒了_尾部貫穿式鍍鉻銀飾條除了丑,還能閃瞎眼

尾部貫穿式鍍鉻銀飾條&#xff0c;在2010年代成為諸多汽車品牌車型爭相采用的新世紀新標配&#xff0c;配以雙邊排氣&#xff0c;讓整個車尾看起來層次感強烈&#xff0c;視覺收窄&#xff0c;幾十萬的奧迪A8L有&#xff0c;十幾萬的斯柯達速派有&#xff0c;A級車有&#xff0…

docker 指定網卡_Docker | Docker技術基礎梳理(五) Docker網絡管理

為什么需要容器的網絡管理&#xff1f;容器的網絡默認與宿主機、與其他容器相互隔離&#xff0c;且容器中可以運行一些網絡應用&#xff0c;比如nginx、web應用、數據庫等&#xff0c;如果需要讓外部也可以訪問這些容器中運行的網絡應用&#xff0c;那么就需要配置網絡來實現。…

java.net.URLEncode編碼 與 URLDecode解碼問題

原文&#xff1a;http://blog.csdn.net/luojian520025/article/details/9139293 -------------------------------------------------------------------------------------------- String mytext java.net.URLEncoder.encode("中國", "utf-8")…

Android安裝兩次才成功,Android應用從市場安裝完成打開與桌面打開,被啟動兩次的問題...

問題描述&#xff1a;1、從Android應用市場下載并安裝應用&#xff0c;安裝完成后&#xff0c;當前界面下方會出現“打開”按鈕&#xff0c;這時候我們點擊“打開”&#xff0c;會啟動應用&#xff0c;進入到應用的啟動頁面&#xff0c;然后進入應用的主界面&#xff0c;這個時…

事務保存點

在SQL Server中使用rollback會回滾所有的未提交事務狀態&#xff0c;但是有些時候我們只需要回滾部分語句&#xff0c;把不需要回滾的語句提到事務外面來&#xff0c;雖然是個方法&#xff0c;但是卻破壞了事務的ACID。 SQL中使用事務保存點 即可解決這個問題. 一.SQL 事務中存…