如何将通配符参数传递给 bash 文件
- 2024-11-13 08:36:00
- admin 原创
- 21
问题描述:
我正在尝试编写一个 bash 脚本,允许用户使用通配符传递目录路径。
例如,
bash show_files.sh *
在此目录中执行时
drw-r--r-- 2 root root 4.0K Sep 18 11:33 dir_a
-rw-r--r-- 1 root root 223 Sep 18 11:33 file_b.txt
-rw-rw-r-- 1 root root 106 Oct 18 15:48 file_c.sql
将输出:
dir_a
file_b.txt
file_c.sql
按照现在的方式,它输出:
dir_a
内容show_files.sh
:
#!/bin/bash
dirs="$1"
for dir in $dirs
do
echo $dir
done
解决方案 1:
调用 的父 shell会为您bash show_files.sh *
扩展*
。
在您的脚本中,您需要使用:
for dir in "$@"
do
echo "$dir"
done
双引号确保文件名中的多个空格等得到正确处理。
另请参阅如何在shell 脚本中迭代参数。bash
可能令人困惑的附录
如果您确实希望让脚本扩展*
,则必须确保将其*
传递给脚本(用引号括起来,就像在其他答案中一样),然后确保在处理的正确位置扩展它(这并不简单)。那时,我会使用数组。
names=( $@ )
for file in "${names[@]}"
do
echo "$file"
done
我通常不使用$@
双引号,但这一次这样做或多或少是正确的。棘手的部分是它不能很好地处理带有空格的通配符。
考虑:
$ > "double space.c"
$ > "double space.h"
$ echo double space.?
double space.c double space.h
$
效果很好。但是尝试将其作为通配符传递给脚本...好吧,我们只能说到那时事情就变得棘手了。
如果要$2
单独提取,那么可以使用:
names=( $1 )
for file in "${names[@]}"
do
echo "$file"
done
# ... use $2 ...
解决方案 2:
引用通配符:
bash show_files.sh '*'
或者让你的脚本接受一个参数列表,而不只是一个:
for dir in "$@"
do
echo "$dir"
done
最好直接进行迭代"$@'
而不是将其分配给另一个变量,以保留其保存本身包含空格的元素的特殊能力。
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD