#!/bin/sh if [ -z "$1" ]; then echo "Usage: $0 " echo "" echo "Run the given test expression for each newline-separated line in stdin, and echo only the lines that return zero." echo "(Think filter in many programming languages)." echo 'The iterator variable is called "$ELEM", and the index variable is called "$IDX".' exit 1 fi i=0 while IFS=$'\n' read -r line; do j=0 for item in $line; do eval "X${j}='$item'" j=$((j+1)) done IDX=$i ELEM="$line" eval "test $1" if [ $? -eq 0 ]; then echo "$line" fi i=$((i+1)) done