나는 다음을 가지고 있습니다
#!/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
). 루프에서 매개변수 확장/매개변수 길이를 사용해 보세요.