我有一个名为 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
被打印。我究竟做错了什么?