This is from page 121 of "Introduction to Linux
for Users and Administrators" and that's a typographical error in the text. The script is also avaliable in other texts from tuxcademy, with the same typographical error.
The single »
character is not the same as the double >>
and it serves no purpose in a shell script. My guess is that the typesetting system used for formatting the text of the book got confused by "`
for some reason and formatted it as a guillemet (angle-quote), or it's just a plain typo (the «...»
quotes are used for quoting ordinary text elsewhere in the document).
The script should read
#!/bin/bash
# Sort files according to their line count
for f
do
echo `wc -l <"$f"` lines in $f
done | sort -n
... but would be better written
#!/bin/sh
# Sort files according to their line count
for f; do
printf '%d lines in %s\n' "$(wc -l <"$f")" "$f"
done | sort -n
The backticks are an older form of $( ... )
, and printf
is better to use for outputting variable data. Also, variable expansions and command substitutions should be quoted, and the script uses no bash
features so it could just as well be executed by /bin/sh
.
Related:
printf
works (seeman 1 printf
, it takes a format string followed by other arguments to substitute into the placeholders in the format string), it will be clear. – Kusalananda Apr 03 '18 at 19:13/bin/sh
implementations which support backticks but not$(...)
, so beware of portability issues. – u1686_grawity Apr 03 '18 at 21:57echo \
wc -l <"$f"` lines in $f` (see lines 435-444). – Scott - Слава Україні Apr 04 '18 at 03:39/bin/sh
, then it's so old that you should not be doing development work on it. If it's a production system, it should seriously be considered for replacing as it would potentially be insecure if connected to the internet. – Kusalananda Apr 04 '18 at 05:50