You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 18:50:43