Bash如何在 bash 函式中執行
如何在 bash 函式中執行 find -exec
— 轉義字元和文件意外結束的問題
我想讓執行這種命令更容易:
find . -type f -exec sed -i 's|wpp-splash|wpp_splash|g' {} \;
所以我在我的創建了一個函式
.bashrc
來縮短它:function sedall() { find . -type f -exec sed -i 's|$1|g' {} \; }
這樣我可以
sedall wpp-splash|wpp_splash
但是有一個語法錯誤。我不確定它是什麼,但 bash 函式導致“文件意外結束”。我想知道是不是和
}
人物有關?我試著像逃避它們一樣\{\}
,但這並沒有解決問題。請問有什麼幫助嗎?
那裡有很多問題。
- 變數不會在單引號內展開。
{ command ; }
需要終止分號(或換行符)。sedall wpp-splash|wpp_splash
這被理解為管道,因為您沒有用引號保護管道字元。我建議這樣做:
sedall(){ [ "$#" = 2 ] || { echo Two arguments needed; return 9; } find . -type f -exec sed -i "s|$1|$2|g" {} \; }
它需要兩個參數而不是一個,它會檢查這兩個參數是否在執行之前給出。
$ cat a b XABCX YABCY $ sedall ABC DEF $ cat a b XDEFX YDEFY