次のようなファイル/ディレクトリのリストが渡されるexcept.shという名前のbashスクリプトがあります。
$ ls
a b c d/
$ ./except.sh b c
この方法以外で呼び出す場合a d/
は、指定された名前を除くすべてのファイル/ディレクトリに展開する必要があります。
これを実装しようとした方法は次のとおりです。
#!/usr/bin/env bash
# enable extended globbing
shopt -s extglob
# set IFS to | so that $* expands correctly
IFS='|'
printf '%s' !("$*")
パラメータb c
として指定すると、最後の行は次のように展開されます。
printf '%s' !(b|c)
a d
印刷されます。しかし、驚いたことに、
abcd
印刷されます。私は何が間違っているのですか?