bash字符串连接错误

bash字符串连接错误,bash,Bash,对我来说,bash脚本总是有点棘手。我有 web_dir=/tng4/users/ldiao/AQF/wrf-chem-result/ rm "$web_dir""three_days_ago/*.gif" 错误消息是 rm: cannot remove '/tng4/users/ldiao/AQF/wrf-chem-result/three_days_ago/*.gif': No such file or directory 但是如果我换成 rm "$web_dir"three_days

对我来说,bash脚本总是有点棘手。我有

web_dir=/tng4/users/ldiao/AQF/wrf-chem-result/
rm "$web_dir""three_days_ago/*.gif"
错误消息是

rm: cannot remove '/tng4/users/ldiao/AQF/wrf-chem-result/three_days_ago/*.gif': 
No such file or directory
但是如果我换成

rm "$web_dir"three_days_ago/*.gif""
然后它就起作用了。没有拼写错误。有人能给我解释一下原因吗?谢谢

原因是在
内部不起作用

正确的变体是

rm -- "$web_dir/three_days_ago/"*.gif
另外,在玩rm时使用
-i
选项。这样,如果您犯了错误或输入错误,它将不会删除您的所有文件,除非您确认。

原因是它在
内部不起作用。“

正确的变体是

rm -- "$web_dir/three_days_ago/"*.gif

另外,在玩rm时使用
-i
选项。这样,如果您犯了错误或输入错误,它将不会删除您的所有文件,除非您确认。

全局字符
*
等不会在引号中展开,但会按字面解释。要了解他们为什么这样设计它,你可能需要询问该语言的开发人员。全局字符
*
等没有在引号中展开,但它们是按字面解释的。为了找出他们为什么这样设计它,你可能需要询问该语言的开发人员之一。准确地说,你的第二个例子是有效的,因为你把
$web\u dir
正确地用双引号括起来,然后是三天前不加引号的
/*.gif
,然后是完全多余的双引号空字符串。值得一提的是,惯用的引用方式类似于
“${web\u dir}三天前”/*.gif
@tripleee,我总是建议在变量之间使用额外的
/
。以防您忘记用斜杠结束变量。两刀不痛。因此,我将您的示例编辑为
“${web\u dir}/三天前”/*.gif
。另外,如果你在引号后或引号前加一个斜杠似乎没有什么区别;但另一方面,引用正则字符是无害的。准确地说,第二个示例之所以有效,是因为
$web\u dir
正确地用双引号括起来,然后是三天前未加引号的
/*.gif
,然后是完全多余的双引号空字符串。值得一提的是,惯用的引用方式类似于
“${web\u dir}三天前”/*.gif
@tripleee,我总是建议在变量之间使用额外的
/
。以防您忘记用斜杠结束变量。两刀不痛。因此,我将您的示例编辑为
“${web\u dir}/三天前”/*.gif
。另外,如果你在引号后或引号前加一个斜杠似乎没有什么区别;但另一方面,引用规则字符是无害的。