我正在编写一种rm
想要将通配符匹配传递给的自定义脚本。我在工作目录中有几个文件,这些文件与传递给脚本的通配符相匹配,但是我只是从一个简单的测试用例中获取了其中一个:
sh remove r*
在remove
脚本中,我将其缩减为
echo $1
这是目录内容:
$ ls
file2 file4 newTestFile remove_engine restore
file3 fileName_1234 remove remove_w restore_engine
这就是我得到的。
$ sh remove r*
remove
我知道,即使在执行脚本之前,BASH也会扩展通配符。但是,为什么我没有得到目录中所有匹配的文件f*
?
路径名扩展(也称为globing)将单个shell单词扩展为多个。就你而言
./remove r*
与跑步完全相同
./remove remove remove_engine restore remove remove_w restore_engine
如您所见,$1
将是remove
因为这是第一个参数。其余文件是单独的位置参数,因此$2
将是remove_engine
和$3
将是restore
。
要处理所有参数"$@"
,可以在循环中使用:
for file in "$@"
do
printf 'One of the matches was: %s\n' "$file"
done
或者直接在也接受多个参数的命令中:
# Delete all matches
echo rm "$@"
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句