谁能向我解释一下暴虐

时间:2018-08-22 08:35:18

标签: linux bash shell

我对在shell脚本中找到的以下正则表达式感到困惑

#!/bin/sh
prog=${0%%.sh}-via.sh

任何人都给我有价值的信息

3 个答案:

答案 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