第一次玩BASH并且有点卡住了。
此脚本将列出所有文件夹,但我想将其修改为在可能的情况下不列出某个文件夹...
工作:
_list_banners () {
for f in * ; do [ -d "$f" ] && echo ${_handle_banner_type}${_handle_message} $f ; done
}
哪个有效并列出文件夹,但我想从列表中排除例如文件夹MASTER
。
尝试:
_list_banners () {
for f in * ;
if [ $f != "MASTER" ]; then
do [ -d "$f" ] && echo ${_handle_banner_type}${_handle_message} $f
fi
; done
}
但是当我运行它时,我得到以下错误而不是我的文件列表:
$ bash myscript
myscript: line 3: syntax error near unexpected token `if'
myscript: line 3: ` if [ $f != "MASTER" ]; then'
答案 0 :(得分:0)
if
是for循环的一部分,不应移到_list_banners () {
for f in * ;
do
if [ "$f" != "MASTER" ]; then
[ -d "$f" ] && echo "${_handle_banner_type}${_handle_message} $f"
fi
done
}
块内:
name
答案 1 :(得分:0)
您可以将目录检查和排除项移动到您的glob中(需要shopt -s extglob
,而shopt -s nullglob
最好避免在没有匹配时出现意外行为):
shopt -s extglob
shopt -s nullglob
_list_banners () {
for f in !(MASTER)/; do
echo "${_handle_banner_type}${_handle_message} $f"
done
}
!(MASTER)
是一个排除MASTER
的glob,而附加/
只返回目录。
如果您只想要没有尾部斜杠的目录名称,则可以在${f%/}
行使用$f
而不只是echo
。