Bash error on if statement -
i have error in bash script when if control between string , script read function
#! /bin/bash test1="false" while [ $test1 == "false" ]; tail -1 demo.txt | while read test echo $test done if [ "test" == $test ]; test1="true" echo "end" else test1="true" echo "else" fi done
this code , result:
#! /bin/bash test1="false" while [ $test1 == "false" ]; tail -1 demo.txt | while read test echo $test done if [ "test1" == "$test" ]; test1="true" echo "end" else test1="true" echo "else" fi done "test2.sh" 17 lines, 215 characters xxx@xxx:/tmp $ ./test2.sh test1 else
if $test
empty, if
becomes:
if [ "test" == ];
which raises error:
-bash: [: test: unary operator expected
you need enclose variable in quotes in order there value when $test
empty:
if [ "test" == "$test" ];
edit: there 2 reasons why $test
"empty". first reason because |
creates subprocess, biffen correctly states. when subprocess exits, variables set within go away. in case, it's not $test
empty; doesn't exist. not @ time try use in if
.
if avoid subprocess (which can done in several ways), might still have empty $test
. trivial way avoid write not pipe, process redirect:
while read test echo $test done < <(tail -1 demo.txt)
this set local variable test
first line, display it, set next line, there no next line; read
fails, not before nukes $test
(so $test
ends empty). works say, can check running this:
while read test realtest="$test" echo $test done < <(tail -1 demo.txt) echo realtest: $realtest
and see $realtest
have last line of file (it not have, if tried redirection approach).
however, if want read single line, why while
loop?
read test < <(tail -1 demo.txt)
Comments
Post a Comment