私は以下を持っています
#!/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
)。ループ内でパラメータ拡張/パラメータ長を使用してみてください。