7
A
回答
14
任意語法不能做任何事情。圓括號是元字符,它們對解析器有特殊的含義,因此您無法使用它們作爲有效的名稱。擴展shell的最好方法是定義函數。
這將是一個基本echo
包裝,始終寫入同一個文件:
f() {
echo "[email protected]"
} >a.txt
這達到同樣的效果,但還處理標準輸入 - 犧牲echo's
-e
和-n
選項:
f() {
[[ ${1+_} || ! -t 0 ]] && printf '%s\n' "${*-$(</dev/fd/0)}"
} >a.txt
其可稱爲
f arg1 arg2...
個
或
f <file
功能都在相同的方式與任何其它命令傳遞的參數。
第二個類似echo的包裝首先測試set first argument或來自非tty的stdin,並使用定位參數(如果設置)或stdin有條件地調用printf。測試表達式避免了零參數和不從文件重定向的情況,在這種情況下,Bash會嘗試擴展終端的輸出,掛起shell。
4
F() {
echo "$1" > a.txt
}
你不你打電話時不用括號。這是你如何稱呼它:
F "text to save"
3
相關問題
- 1. 定義一個宏的函數定義
- 2. 定義函數宏
- 3. 「Comment」out宏函數定義
- 4. 函數式宏定義
- 5. 在宏中定義函數(在C中)
- 6. 在bash中定義一個沒有shell腳本的shell函數?
- 7. 確定定義bash函數的位置
- 8. 如何在一個只能定義一次的函數或宏函數中創建一個變量?
- 9. 帶宏的動態函數定義
- 10. 函數名稱的預定義宏__func__
- 11. 宏定義宏
- 12. 在Lua中定義一個函數?
- 13. 在條件內定義一個函數
- 14. 在宏內部或外部定義一個函數(高中斷)C
- 15. 數組宏定義
- 16. 如何創建一個宏來定義clojure中的兩個函數
- 17. 在C++中爲特定函數定義宏
- 18. 定時bash函數
- 19. 定義一個常數函數調用
- 20. 定義一個函數作爲參數
- 21. 如何定義一個常數函數
- 22. 定義一個宏來替換代碼
- 23. <algorithm>定義了一個宏X?
- 24. 爲什麼#定義一個空的宏?
- 25. 定義另一組宏的多行宏
- 26. 定義數據特定的Clojure函數,可能與宏?
- 27. Node.JS - 在另一個函數中調用預定義函數
- 28. 在另一個函數中定義的訪問函數
- 29. R在函數裏面定義一個函數屬性
- 30. elixir中的宏擴展:如何使用另一個宏來定義2個宏?
+1,很好的答案。你會介意更詳細地解釋爲什麼你使用更復雜(但更好)的構造來輸出參數嗎? – Kaii 2012-04-17 07:31:56
它只允許來自stdin或參數的輸入。測試表達式可以防止出現零參數和stdin來自終端的情況,在這種情況下,因爲進程自己的tty正在讀取和阻止,所以shell將不得不被終止。如果通過,那麼位置參數將被放大(如果已設置),或者擴展將從函數的輸入中讀取。使用'cat'可以實現稍微更便攜但更慢的解決方案 - 這需要一個具有真正的/ dev/fd/*的系統。自從我之前的回答與其他回答相同以來,我只是發佈了這個技巧。 :) – ormaaj 2012-04-17 08:07:59
也,它確實允許*多個參數*就像'echo'一樣。你的函數使用'f一二三',而其他函數只能用'f'一二三''工作。考慮到沒有qotes的輸入,其他解決方案只考慮第一個詞(這裏:「one」)。 – Kaii 2012-04-17 08:11:00