
我發現當我想創建一些 shell 腳本或高級命令時,我總是很難記住命令的名稱及其開關。
例如
tr -d '\n' < file | wc -c
雖然在程式語言中我可以寫類似的東西
len(替換(str(檔案), "\n", ""))
哪個更容易記住,並且在手冊頁中搜尋的可能性更小,並且對其他人來說更容易理解。
那麼,為什麼 shell 腳本多年來一直保持著這種神秘的形式呢?他們是否努力改變語法,以便在不需要研究大量手冊頁的情況下清楚代碼的作用?這種形式有什麼優點嗎?我們如何應對 shell 腳本的缺點並充分發揮其作用?
答案1
您知道多少種程式語言可以讓您打開文件進行讀取,調用使用該文件內容的庫函數,將該函數的輸出流式傳輸到另一個函數,將第二個函數的輸出返回給用戶,返回退出狀態,然後清理所有內容,所有這些都在很短的一行中完成?
您給出的範例遺漏了大多數語言所需的許多支援 gubbin。
有多少種程式語言具有接受任意數量的輸入、以多種模式工作並且具有簡單介面的函式庫函數?
printf
也許吧,但大多數函式庫最終都會有一系列不同名稱和不同參數的函數,您必須學習這些函數。我看不出有什麼差別。
此外,大多數語言都會串列呼叫這些函數。 Shell 腳本並行運行它們,並且可以通過管道傳輸任意數量的數據,而不消耗太多內存,並且(如果數據源是鍵盤、網絡套接字或其他東西)這一切都是通過惰性求值完成的,當數據到達。你最喜歡的語言能做到這一點嗎?
有許多語言可以更快、更有效率地完成這項工作,或者可以更準確地處理數字,但不要低估 shell 腳本的力量!
至於語法?嗯,它有效。無論現在看起來如何,你都必須學習它。你還想要什麼?
答案2
嘗試pbs
-- 將命令列工具與 Python 結合 -- 例如這樣:
# sort this directory by biggest file
print sort(du(glob("*"), "-sb"), "-rn")
# print the number of folders and files in /etc
print wc(ls("/etc", "-1"), "-l")