bashで2文字より大きいすべての引数をどのようにエコーしますか?

bashで2文字より大きいすべての引数をどのようにエコーしますか?

私は以下を持っています

#!/bin/bash
function f1 ()
{
  echo "all parameters with more than 2 characters"
}
f1 123 45 6789

2より大きい文字を含むパラメーターに対していくつかの操作を実行する必要があります。エコーできますか?拡張されない「$ @」をループに接続し、wc -c この場合は出力する必要があります。123 6789

答え1

あなたは必要ありません拡張 $@しかし、繰り返す必要があります。

for arg in "$@"
do
  [ "${#arg}" -gt 2 ] && printf '%s\n' "$arg"
done

コード${#arg}は長さ(バイト)を要求します$arg

答え2

#!/bin/bash
f1(){
     tr -s " " "\n" <<< "$@"| grep ...|tr -s "\n" " "
}

答え3

以下を使用する方が簡単ですzsh

#! /bin/zsh -
f1() print -r -- ${(M)@:#???*}

${array:#pattern}配列拡張(${var#pattern}/ ${var##pattern}ksh演算子の拡張)からパターンに一致する要素を削除することです。Mパラメータ拡張フラグを含める(マッチ)、逆に一致するコンテンツのみが保持されます。

答え4

外部コマンドは必要ありません(wc)。ループ内でパラメータ拡張/パラメータ長を使用してみてください。

関連情報