cm0002@lemmy.world to Programmer Humor@programming.dev · 5 days agoLike programming in bashlemmy.mlimagemessage-square64fedilinkarrow-up163arrow-down10
arrow-up163arrow-down1imageLike programming in bashlemmy.mlcm0002@lemmy.world to Programmer Humor@programming.dev · 5 days agomessage-square64fedilink
minus-squareClemaX@lemm.eelinkfedilinkarrow-up1·edit-25 days agoIt all makes sense when you think about the way it will be parsed. I prefer to use newlines instead of semicolons to show the blocks more clearly. for file in *.txt do cat "$file" done The do and done serve as the loop block delimiters. Such as { and } in many other languages. The shell parser couldn’t know where stuff starts/ends. Edit: I agree that the then/fi, do/done case/esac are very inconsistent. Also to fail early and raise errors on uninitialized variables, I recommend to add this to the beginning of your bash scripts: set -euo pipefail Or only this for regular sh scripts: set -eu -e: Exit on error -u: Error on access to undefined variable -o pipefail: Abort pipeline early if any part of it fails. There is also -x that can be very useful for debugging as it shows a trace of every command and result as it is executed.
It all makes sense when you think about the way it will be parsed. I prefer to use newlines instead of semicolons to show the blocks more clearly.
for file in *.txt do cat "$file" done
The
do
anddone
serve as the loop block delimiters. Such as{
and}
in many other languages. The shell parser couldn’t know where stuff starts/ends.Edit: I agree that the
then
/fi
,do
/done
case
/esac
are very inconsistent.Also to fail early and raise errors on uninitialized variables, I recommend to add this to the beginning of your bash scripts:
set -euo pipefail
Or only this for regular sh scripts:
set -eu
-e
: Exit on error-u
: Error on access to undefined variable-o pipefail
: Abort pipeline early if any part of it fails.There is also
-x
that can be very useful for debugging as it shows a trace of every command and result as it is executed.