全球匹配仅返回第一个匹配

康纳M.

我正在编写一种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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章