我对在shell脚本中找到的以下正则表达式感到困惑
#!/bin/sh
prog=${0%%.sh}-via.sh
任何人都给我有价值的信息
答案 0 :(得分:4)
该脚本中不涉及任何正则表达式。
${0}
是被调用脚本的名称。
%%
运算符删除了匹配的后缀模式。因此,${0%%.sh}
是被调用脚本的名称,不带最终的“ .sh”。
最后,${0%%.sh}-via.sh
是被调用脚本的名称,不带最终的“ .sh”,并附加“ -via.sh”。
该值已分配给变量prog
。
答案 1 :(得分:2)
运行脚本时,变量$0
会自动设置为脚本名称(可能包含文件夹也可能不包含文件夹,但是我认为这与您的问题无关)。
在bash中,${0}
语法可用于获取相同的变量,但是在花括号中,您可以为变量添加额外的处理。在您的示例中:
${0%%.sh}
将使用parameter substitution删除字符串末尾的“ .sh”部分。
prog=${0%%.sh}-via.sh
将在末尾添加-via.sh
,并将其分配给prog
。
总而言之,它所做的就是将.sh
替换为-via.sh
。假设您的脚本名为“ myscript.sh”,那么prog
将被分配一个值“ myscript-via.sh”。
作为旁注,我建议您使用#!/bin/bash
而不是#!/bin/sh
来启动脚本,因为参数替换是一项bash功能。有关其重要性的更多信息,here。
答案 2 :(得分:1)
${0%%.sh}
从变量.sh
中删除后缀0
(包含脚本的名称)并附加-via.sh
。结果存储在prog
<script_name_without_extension>-via.sh
中
有关进一步的参考,请参阅以下相关问题:Remove a fixed prefix/suffix from a string in Bash