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). 루프에서 매개변수 확장/매개변수 길이를 사용해 보세요.

관련 정보