我是第一次玩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'
发布于 2018-02-06 06:29:04
您可以将目录检查和排除都移动到您的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,追加/
仅返回目录。
如果只想要目录名而不带尾部斜杠,那么可以在echo
行中使用${f%/}
,而不只是$f
。
发布于 2018-02-06 06:23:22
do
是for循环的一部分,不应该移到if
块中:
_list_banners () {
for f in * ;
do
if [ "$f" != "MASTER" ]; then
[ -d "$f" ] && echo "${_handle_banner_type}${_handle_message} $f"
fi
done
}
https://stackoverflow.com/questions/48632436
复制相似问题