我想使用通配符输入与模式匹配的所有输入。例子:
$ 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 上的这个问题有关处理脚本中的参数的更多信息。