From 7e79899977a235f2a8f5b6385bf5d7fbeb5dd3f5 Mon Sep 17 00:00:00 2001 From: Dylan Araps Date: Sat, 16 Jun 2018 09:09:56 +1000 Subject: [PATCH] Added lines_loop --- README.md | 23 ++++++++++++++++++++--- test.sh | 7 +++++++ 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index ffba0b6..b000f56 100644 --- a/README.md +++ b/README.md @@ -755,9 +755,7 @@ $ tail 1 ~/.bashrc Alternative to `wc -l`. -**CAVEAT:** Requires `bash` 4+ - -**Example Function:** +**Example Function (bash 4):** ```sh lines() { @@ -767,11 +765,30 @@ lines() { } ``` +**Example Function (bash 3):** + +This method uses less memory than the `mapfile` method and it's more +compatible but it's slower for bigger files. + +```sh +lines_loop() { + # Usage lines_loop "file" + count=0 + while IFS= read -r _; do + ((count++)) + done < "$1" + printf '%s\n' "$count" +} +``` + **Example Usage:** ```shell $ lines ~/.bashrc 48 + +$ lines_loop ~/.bashrc +48 ``` ## Count files or directories in directory. diff --git a/test.sh b/test.sh index 80f4d10..21cce2a 100755 --- a/test.sh +++ b/test.sh @@ -91,6 +91,13 @@ test_lines() { rm test_file } +test_lines_loop() { + printf '\n\n\n\n\n\n\n\n' > test_file + result="$(lines_loop test_file)" + assert_equals "$result" "8" + rm test_file +} + test_count() { result="$(count ./{README.m,LICENSE.m,.travis.ym}*)" assert_equals "$result" "3"