![bash에서 2자보다 큰 모든 인수를 어떻게 에코합니까?](https://linux55.com/image/143336/bash%EC%97%90%EC%84%9C%202%EC%9E%90%EB%B3%B4%EB%8B%A4%20%ED%81%B0%20%EB%AA%A8%EB%93%A0%20%EC%9D%B8%EC%88%98%EB%A5%BC%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%EC%97%90%EC%BD%94%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
나는 다음을 가지고 있습니다
#!/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
). 루프에서 매개변수 확장/매개변수 길이를 사용해 보세요.