BASH nullglob和dotglob

时间:2019-11-20 08:53:02  来源:igfitidea点击:

BASH下nullglob和dotglob变量如何使用?

如何检查目录中是否有.cpp文件?

在bash脚本中,匹配单词中如果包含*,?或者[。那么将其视为匹配模式符。

  1. nullglob:如果设置了nullglob,bash允许将没有匹配的文件名变成空字符串,而不是它们自己的名字。这对于检查目录中的任何* .mp3或* .c文件很有用。
  2. dotglob:如果设置了dotglob,bash将把以点号开头的文件包含到匹配结果中。

如何设置和取消设置nullglob变量?

使用shopt命令切换变量的值。 -s选项启用nullglob效果,-u选项禁用nullglob选项。

shopt -s nullglob # enable 
shopt -u nullglob # disable

示例:检查目录中是否存在* .mp3文件:

#!/bin/bash
old=$(cd)
[ $# -eq 0 ] && exit 1
[ -d  ] && cd  || exit 2
 
shopt -s nullglob
found=0
for i in *.mp3; do
	echo "File $i found" # or take other action
	found=1
done
shopt -u nullglob
[ $found -eq 0 ] && echo "Directory is empty"
cd $old

如果没有nullglob,则仅当给定目录中没有文件时,才会扩展为*.mp3。