Shell中獲取命令輸出的乙個坑

2022-03-31 13:07:07 字數 480 閱讀 4008

在寫乙個shell指令碼的時候,遇到乙個奇怪的問題,如下語句:

desc=$(grep desc main.cpp)
正常情況下,應該是把grep的輸出的內容儲存到desc變數裡,然而結果竟然把當前目錄下所有檔案的檔名都存進去了。

折騰了很久,終於在grep的檔案中找到了貓膩,見main.cpp:

/*

* desc: bilibala bilibala...

*/int main()

這樣grep desc main.cpp的結果便是:* desc: bilibala bilibala...

注意,前面有乙個*號,這就是問題所在,當使用$(...)的方法獲取命令的輸出時,會自動把*號擴充套件成當前目錄下的檔名(為什麼呢?我沒有細究)。這就肯定出問題了,解決的辦法就是把注釋改成雙斜槓的,避免出現*號(懶得找其他方式了,能讓我的指令碼work就好)。

perl呼叫shell命令並獲取輸出

1system perl也可以用system呼叫shell的命令,它和awk的system一樣,返回值也是它呼叫的命令的退出狀態.如果向system傳遞乙個字串作引數,則perl會呼叫shell來執行這個命令,在這個字串內也就不可以有perl的變數了 如果傳遞多個字串作引數,則perl會自己執行這個...

linux中新增乙個shell命令最簡單的方法

linux中新增乙個shell命令最簡單的方法 結論 執行shell指令碼之後,其中的function就自動成為了當前shell中的新增命令了。android編譯時會執行.build envsetup.sh指令碼,執行後就為當前shell新增了一些命令,如 croot,lunch,mm,mmm,mm...

Shell中的tr命令加密解密中的乙個小應用

tr命令可以來刪除或替換,這個可能大家都非常熟悉。比如 root localhost echo the number 12345 tr cd 0 9 僅保留數字 12345 root localhost echo tom tr a z a z 轉變為大寫 tom上面的方法也許是tr命令中最常用的,但...