명령 출력의 배열이 있습니다.
array=(saf sri trip tata strokes)
이제 사용자 입력을 기반으로 항목을 필터링하고 싶습니다. 사용자는 와일드카드를 사용할 수도 있으므로 사용자가 를 입력하면 *tr*
출력은 다음과 같아야 합니다.
trip strokes
답변1
다음을 사용하는 것이 더 쉽습니다 zsh
.
$ array=(saf sri trip tata strokes)
$ pattern='*tr*'
$ printf '%s\n' ${(M)array:#$~pattern}
trip
strokes
${array:#pattern}
: 배열의 요소로 확장됩니다.아니요패턴을 일치시킵니다.(M)
:#
(일치의 경우): 일치하는 요소로 확장된 연산자의 의미를 복원합니다.$~pattern
, 결과 콘텐츠는$pattern
패턴으로 처리됩니다.
답변2
한 가지 방법은 다음과 같습니다.
array=(saf sri trip tata strokes)
input=*tr*
for foo in "${array[@]}"; do
case "$foo" in
$input) printf '%s\n' "$foo" ;;
esac
done
지나치게 열정적으로 인용하는 사람을 위한 참고 사항: 과제의 오른쪽(예: *tr*
) 에는 input=*tr*
인용이 필요하지 않습니다.