bashのコマンドで関数の使用に関する質問があります。 getRegex
は私の関数で、ファイルの最後に定義されています。私が使用するコマンドは以下の通りです:私はそれを呼び出す場合、このメソッドが正しく動作する2にそれを分割しても、bashコマンドで関数を呼び出す
COUNT=`grep -rnE 'getRegex' $HOME/new`
は今、私は別の亜種の多くを試みたが、私はそれを動作させることができません以下の通り:getRegex
。私の欠点は何ですか? TIA
bashのコマンドで関数の使用に関する質問があります。 getRegex
は私の関数で、ファイルの最後に定義されています。私が使用するコマンドは以下の通りです:私はそれを呼び出す場合、このメソッドが正しく動作する2にそれを分割しても、bashコマンドで関数を呼び出す
COUNT=`grep -rnE 'getRegex' $HOME/new`
は今、私は別の亜種の多くを試みたが、私はそれを動作させることができません以下の通り:getRegex
。私の欠点は何ですか? TIA
答えるためにキーワードを使用すると、man bash
やGoogleで見つけることができる"bash command substitution"、です。
ところで、ここでは二重引用符が重要です。 `COUNT = $(grepの-rnE '$(getRegex)' $ HOME /新)`を返す: `10行目:getRegex:コマンドではありませんが、あなたの答えを
#!/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)
感謝見つけた。 – user1020822
@ダン、実際にコードが実行されたことを確認しましたか? 2番目の例では一重引用符については確信していますか? –
dmalikovはもちろん正しいですが、それらは二重引用符でなければなりません.bashの一重引用符は変数を展開しないためです。 – Dan