我正在尝试为专注于 Linux/Unix 的 COSC 课程回答这个问题。
我使用的是带有 bash shell 的 Linux。我是 9 月份才开始接触 Linux 的。
我的老师在本周的作业中提出了这个问题,根据课堂讨论,这个问题从被列入到被排除。在花了这么多时间之后,我真的很想搞定这个问题。
我提出的命令不考虑文件名是否以偶数开头,后跟另一个使用通配符的数字。这是问题是否包含在作业中的关键点,我花了几个小时试图解决这个问题。
这可能吗?
我想到了:
echo [!02468][a-zA-Z]*
欢迎并非常感谢任何建议。
答案1
您还可以执行以下操作
shopt -s extglob
echo !([02468][a-zA-Z]*)
shopt -u extglob
您需要先使用 启用它extglob
。shopt -s extglob
之后
,您可以使用 再次禁用它shopt -u extglob
。
extglob shell 选项为您提供了命令行中更强大的模式匹配。
答案2
我认为用简单的命令不可能做到这一点。不过下面的命令应该可以解决问题:
for i in *; do
case "$i" in
[02468][a-zA-Z]*) ;; # do nothing
*) echo "$i" ;;
esac
done
答案3
下面应该可以解决问题
echo !([02468][a-zA-Z])
答案4
@Rik 的解决方案使用extglob
可能是最好的方法bash
。如果您需要一种与 shell 无关的方法(假设您使用 GNU find),请尝试以下方法:
find . -type f -not -name "[02468][a-zA-Z]*"