gpt4 book ai didi

tcl - tclsh "$@" "$0" "$@"的用途和作用

转载 作者:行者123 更新时间:2023-12-02 07:06:02 24 4
gpt4 key购买 nike

我搜索了很长时间,但只能找到一个简短的解释,即 $@ 扩展了一些东西。

有人可以解释一下或向我提供一个链接,以详细解释 "$@" 作为

的第二个参数的目的
tclsh "$0" "$@"

另外,我正在查看某人的脚本,他们有以下内容:

exec tclsh `basename $0` $*

$* 在这种情况下做什么?

非常感谢。

最佳答案

这些是 Tcl 脚本中经常使用的引导节的一部分。让我们得到整个节:

#!/bin/sh
# A Tcl comment, whose contents don't matter \
exec tclsh "$0" "$@"

第一行将脚本作为 Bourne shell 程序运行(bash 和许多其他 shell 的工作方式相同;它是 POSIX 规范)。第二行被 shell 忽略。第三行用传递给 shell 的参数替换 带有 tclsh 的 shell。 "$0" 是脚本的名称,"$@" 是所有带有适当引号的参数的魔法。 (您可能还会看到 ${1+"$@"},它是一些旧 shell 中邪恶错误的解决方法。)理论上您可以在这里省略 exec,但是这意味着脚本的其余部分将在 Tcl 程序终止时由系统 shell 解释;那可能不是你想要的。最后,当 tclsh 看到上面的那些行时,它认为它们是所有注释; Tcl 注释从行首的 # 开始(或前面有空格),在允许行继续标记 之后继续到行尾。 (是的,这很不寻常。不过很有用。)

basename 的形式很不寻常,因为它会删除正在执行的文件的所有路径。这可能不是一个好主意,因为它可能意味着 tclsh 不知道要执行哪个文件。同样,$* 也几乎但不正确(它扩展到所有参数,但没有引号;如果用户传入带空格的文件名,您很快就会看看区别!)

最后,这些天来使用这样的开始节被认为是最佳实践:

#!/usr/bin/env tclsh

它更短,更不容易出错,并且与 shell 一样标准化。

关于tcl - tclsh "$@" "$0" "$@"的用途和作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11767319/

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