Shell脚本IF语句中两个变量之间的正斜杠是什么作用?
Bash 模式替换参数扩展语法说明
你提到的${lsof_line/$c2}中的正斜杠是Bash参数扩展(也叫变量替换)中模式替换语法的分隔符,具体规则和作用如下:
语法规则
Bash的单匹配模式替换基础语法为:${变量/匹配模式/替换值}
- 第一个斜杠用于分隔「变量名」和「匹配模式」
- 第二个斜杠用于分隔「匹配模式」和「替换值」
如果省略第二个斜杠和后面的替换值,默认表示将匹配到的内容替换为空,也就是删除匹配内容。你给出的代码就是这种用法,作用是把lsof_line变量中第一个匹配$c2值的内容删掉。
结合上下文的逻辑说明
这段代码的判断语句if [ "${lsof_line/$c2}" != "$lsof_line" ],本质是用来检测lsof_line中是否包含$c2对应的IOC(威胁指示器,也就是C2服务器地址):
- 如果
lsof_line中包含$c2的内容:替换操作会删掉对应内容,得到的新值和原lsof_line值不相等,判断条件成立,触发C2服务器发现的警告日志 - 如果
lsof_line中不包含$c2的内容:替换操作没有可以匹配删除的内容,得到的新值和原lsof_line值完全相等,判断条件不成立
补充说明
- 如果要匹配替换变量中所有符合模式的内容,需要把第一个分隔符改成两个斜杠,语法为
${变量//匹配模式/替换值} - 该语法是Bash特有的扩展功能,不能在POSIX标准的sh脚本中使用
内容的提问来源于stack exchange,提问作者Liberator48
相关产品推荐
相关产品推荐

