如何在 shell 脚本中对多个事件使用通配符?

如何在 shell 脚本中对多个事件使用通配符?

我想使用通配符输入与模式匹配的所有输入。例子:

$ cat file_lister.sh
echo $1

$ ls *.txt
file1.txt
file2.txt
file3.txt

$ ./file_lister.sh ./*.txt
file1.txt

但我期望我的脚本能够打印

file1.txt
file2.txt
file3.txt

答案1

当您运行脚本时:

$ ./file_lister.sh ./*.txt

shell 扩展./*.txt./file1.txt ./file2.txt ./file3.txt,因此扩展后您实际上最终会执行:

$ ./file_lister.sh ./file1.txt ./file2.txt ./file3.txt

您的脚本打印第一个参数:

echo $1

$1对应于传递给脚本的第一个参数,在本例中是./file1.txt- 我希望看到它而不只是file1.txt(除非你真的运行了./file_lister.sh *.txt)。

正如其他人在评论中建议的那样,如果您想打印全部除了第一个参数之外,您还可以做很多事情。最简单的是将$1(第一个参数)更改为$@(所有参数)。

#!/bin/bash
printf '%s\n' "$@"

Stack Overflow 上的这个问题有关处理脚本中的参数的更多信息。

相关内容