我有一個關於在bash中的命令中使用函數的問題。 getRegex
是我的功能,它定義在文件的末尾。我想使用的命令如下:Bash在命令中調用函數
COUNT=`grep -rnE 'getRegex' $HOME/new`
現在,我嘗試了很多不同的變種,但我不能讓它工作,即使我在第2把它分解的方法可以正常工作,如果我把它叫做以下方式:getRegex
。任何想法我失蹤? TIA
我有一個關於在bash中的命令中使用函數的問題。 getRegex
是我的功能,它定義在文件的末尾。我想使用的命令如下:Bash在命令中調用函數
COUNT=`grep -rnE 'getRegex' $HOME/new`
現在,我嘗試了很多不同的變種,但我不能讓它工作,即使我在第2把它分解的方法可以正常工作,如果我把它叫做以下方式:getRegex
。任何想法我失蹤? TIA
的關鍵詞來回答是"bash command substitution",你會發現在man bash
或谷歌。
順便說一句,雙引號在這裏真的很重要。
#!/bin/bash
function my_func() {
echo "no"
}
string="no you don't
no you don't
no you don't
no you don't
no you don't"
COUNT="$(echo "${string}" | grep "$(my_func)" -c)"
echo "${COUNT}"
而且
$> ./ok.sh
5
如果你想在另一個bash命令中調用bash命令,內部命令(這裏是getRegex)需要用反引號``
括起來,否則它將被解釋爲文本。既然你在這裏反引號,你就需要逃避內線。試試這個:
COUNT=`grep -rnE '\`getRegex\`' $HOME/new`
但是,通過POSIX的奇蹟,我們可以使用不同的語法。任何你使用反引號的地方,你也可以使用$()
。因此,爲了避免反斜線嘔吐,你可以寫:
COUNT=$(grep -rnE '$(getRegex)' $HOME/new)
謝謝您的回答,但:'COUNT = $(grep的-rnE '$(getRegex)' $ HOME /新)'回報:'行10:getRegex:命令不found'。 – user1020822
@丹,你看看你的代碼真的做了嗎?你確定在第二個例子中使用單引號嗎? –
dmalikov當然是正確的,那些應該是雙引號,因爲bash中的單引號不會擴展變量。 – Dan