gpt4 book ai didi

linux - 在 shell 脚本中打印命令名称

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:16:48 26 4
gpt4 key购买 nike

#!/bin/bash

cmdname=${0##*/}
tmplogfile="/tmp/."$cmdname".log"

echo $cmdname
exit 0

我有上面的 shell 脚本来完成一些任务。我不明白 ${0##*/} 在这里是什么意思。我将 ${0##*/} 更改为 ${0},结果相同。有人能告诉我额外的 ##*/ 是什么吗是什么意思?

谢谢。

最佳答案

这是一个 shell 变量替换符号,用于删除与 ## 之后的表达式匹配的最大前缀模式。这个表达式是一个 shell 模式而不是一个正则表达式。在这种情况下,它会删除 $0 中以/结尾的最长前缀。例如,对于下面的脚本:

/home/user/> cat /home/user/scriptecho 'Value of $0      ' : $0echo 'Value of ${0##*/}' : ${0##*/}/home/user/> sh scriptValue of $0       : scriptValue of ${0##*/} : script/home/user/> sh /home/user/scriptValue of $0       : /home/user/scriptValue of ${0##*/} : script

来自 FreeBSD sh manpage :

${parameter##word}

Remove Largest Prefix Pattern.  The word is expanded to produce a
pattern. The parameter expansion then results in parameter, with
the largest portion of the prefix matched by the pattern deleted.

虽然这是 FreeBSD sh 联机帮助页,但同样适用于所有类似 Bourne 的 shell。

关于linux - 在 shell 脚本中打印命令名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29160019/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com