On Fri, Jun 01, 2018 at 10:56:39AM -0400, D. Hugh Redelmeier via talk wrote: > Rules for quoting in bash (or any language with macro semantics) are > hard. Quoting doesn't seem to be natural for humans. Without quotes, > data can bleed into code. > > When I'm writing a bash script, I try to quote every macro use except for > those that must not be quoted. > > The reason: without quoting, the use will probably break if there is a > space (or other odd thing) in the value but "normal" testing rarely > uncovers this. > > UNIX/Linux folks don't think that spaces belong in pathnames but GUIs > and the OS don't agree. > > Repeat advice: > > - use "set -u" to turn references to undefined macros (spelling > errors) into bash errors > > - use "set -e" so that a shell script stops when a command returns an > error value that the script tacitly ignores. > > bash scripts are easy to get wrong. I've found that these habits > expose or prevent a significant number of mistakes. They also remove > these issues from consideration when you are trying to puzzle out some > bash problem.
Oh yes quoting is fun. $ ls 'a b c.png' a.png b.png c.png $ for f in "*.png"; do echo "$f"; done a b c.png a.png b.png c.png $ for f in "*.png"; do echo "$f"; done *.png $ for f in *.png; do echo "$f"; done a b c.png a.png b.png c.png $ for f in *.png; do ls $f; done ls: cannot access 'a': No such file or directory ls: cannot access 'b': No such file or directory c.png a.png b.png c.png Some places you must use it and some places you must not. -- Len Sorensen --- Talk Mailing List [email protected] https://gtalug.org/mailman/listinfo/talk
