我有一个名为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
打印出来了。我做错了什么吗?