如何在Shell脚本中接收并保留正则通配符形式的参数?
问题场景
现有脚本script.sh内容如下:
v1=$1 v2=$2 v3=$3 echo $v1 $v2 $v3
执行命令:
sh script.sh "*.txt" "*.xml" "com*.jar"
当前工作目录存在abc.txt,无.xml或.jar文件时,脚本输出为:
abc.txt *.xml com*.jar
需求是让变量v1、v2、v3保留原始参数值*.txt *.xml com*.jar,以便后续在脚本中传给find命令使用通配符。
解决方法
问题根源是变量引用时未加双引号,导致bash自动执行路径扩展——把匹配到的文件名替换了通配符。只要在变量赋值和引用时用双引号包裹,就能保留原始字符串。
修改后的脚本:
v1="$1" v2="$2" v3="$3" echo "$v1 $v2 $v3"
这样执行原命令后,输出会是:
*.txt *.xml com*.jar
补充说明
- 你在命令行执行时已经用双引号包裹了参数,这一步是正确的,避免了命令行层面的通配符扩展
- 后续在脚本中使用
find命令时,同样要注意用双引号引用这些变量,比如:
确保find . -name "$v1"find能接收到原始的通配符参数。
内容的提问来源于stack exchange,提问作者Sahil Gevariya
相关产品推荐
相关产品推荐

