11

fish shellを試しているので、bash 関数を翻訳しています。問題は、あるケースでは、文字列が正規表現に一致するかどうかを確認するために bash 正規表現を使用していることです。これを魚に変換する方法がわかりません。

これが私の例です

if [[ "$arg" =~ ^[0-9]+$ ]]
...
  • sedを調べましたが、正規表現が一致するかどうかに基づいて終了ステータスを設定する方法がわかりません。
  • Rubyへの委譲を検討しましたが、一致に基づいて設定された終了ステータスを取得するには、これを非常に醜くする必要があります (以下を参照)。
  • 私はbashに委任することを検討しましたが、おそらく3つまたは4つの方法を試したにもかかわらず、それが一致することはありませんでした。

それで、文字列が正規表現に一致するかどうかを確認する* nixの方法があるので、条件にドロップできますか?


これは私が現在動作しているものですが、私は不満です:

# kill jobs by job number, or range of job numbers
# example: k 1 2 5
# example: k 1..5
# example: k 1..5 7 10..15
# example: k 1-5 7 10-15
function k
  for arg in $argv
    if ruby -e "exit ('$arg' =~ /^[0-9]+\$/ ? 0 : 1)"
      kill -9 %$arg
    else
      set _start (echo "$arg" | sed 's/[^0-9].*$//')
      set _end   (echo "$arg" | sed 's/^[0-9]*[^0-9]*//')

      for n in (seq $_start $_end)
        kill -9 %"$n"
      end
    end
  end
end
4

3 に答える 3

6

組み込みのstring matchサブコマンドを使用することをお勧めします

if string match -r -q  '^[0-9]+$' $arg
  echo "number!"
else
  echo "not a number"
end
于 2018-01-02T19:39:59.447 に答える
-1

バージョン 3.2 以降、Bash は正規表現をネイティブにサポートしています。http: //www.tldp.org/LDP/abs/html/bashver3.html#REGEXMATCHREF を参照してください。

于 2016-06-14T09:36:26.363 に答える