aboutsummaryrefslogtreecommitdiffstats
path: root/tools/each
diff options
context:
space:
mode:
Diffstat (limited to 'tools/each')
-rwxr-xr-xtools/each21
1 files changed, 21 insertions, 0 deletions
diff --git a/tools/each b/tools/each
new file mode 100755
index 0000000..da5ce84
--- /dev/null
+++ b/tools/each
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+if [ -z "$1" ]; then
+ echo "Usage: $0 <command>"
+ echo ""
+ echo "Run the given command for each newline-separated line in stdin (think for-each 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 "$1"
+ i=$((i+1))
+done