So then, please review. One question at the bottom.
# Most basic usage
basename /foo/bar.txt => bar.txt
# Old/current "basename NAME SUFFIX" compat-
# ibility
basename /foo/bar.txt .txt => bar
# ERROR, one too many operands
basename /foo/bar.txt /x.txt /y.txt => ERROR
# BSD-adopted flag to signify no args are a
# suffix, process all
basename -a /foo/bar.txt /x/y.txt => bar.txt
y.txt
# For completeness, showing 3 args with -a
basename -a /foo/bar.txt /x/y.txt /a/b.txt => bar.txt
y.txt
b.txt
basename -s .txt -a /foo/bar.txt /x/y.txt /a/b.txt => bar
y
b
# No args means read stdin (-f,--filter mode)
cat filelist.txt | basename => bar.txt
y.txt
b.txt
# Only "-s <arg>" means read stdin (-f,--filter
# mode)
cat filelist.txt | basename -s .txt => bar
y
b
# Handle NUL-terminated stdin
find / -print | basename --file0-from=- => bar.txt
y.txt
b.txt
# Handle NUL-terminated stdin with suffix strip
# (assuming /hh has our 3 files in it and is
# readable)
find /hh -print | basename --file0-from=- -s .txt => bar
y
b
# Handle NUL-terminated FILE input
find / -print | basename --file0-from=FILE => bar.txt
y.txt
b.txt
etc...
Is "-f,--filter" necessary?