【问题标题】:What is ${Tmp0} in a sh script?sh 脚本中的 ${Tmp0} 是什么?
【发布时间】:2011-12-12 19:52:23
【问题描述】:

在一个shell脚本中,我找到了以下代码行:

rm -f "${Tmp0}"

这是脚本的第一行之一,我不熟悉 Tmp0 变量。它是一个外壳标准映射到特定的东西吗?我做了一些谷歌搜索,但似乎找不到很好的解释。

我怀疑这是脚本之前版本的遗留问题(无需查看整个内容,这无关紧要),因为我在其中的其他任何地方都看不到对这个变量的任何引用。

【问题讨论】:

    标签: shell unix scripting environment-variables sh


    【解决方案1】:

    它没有预定义的含义,但这并不意味着它没有用。如果有人在调用此脚本之前导出此变量,它将删除定义的文件。此外,如果这个脚本sources 另一个文件,这个变量可能会在那里定义。

    无论如何,如果这两个条件都不成立,那么它确实可能是剩下的。

    【讨论】:

    • 感谢您的信息。我虽然也一样,但想确认一下。
    【解决方案2】:

    变量${Tmp0}没有标准含义。

    通常,在此之前会有一个分配给Tmp0,例如:

    Tmp0="${TMPDIR:-/tmp}/tmp.$$.0"               # Generate a file name
    rm -f "${Tmp0}"                               # Ensure file does not exist!
    trap 'rm -f "${Tmp0}"; exit 1' 0 1 2 3 13 15  # Ensure file is cleaned up on early exit
    
    ...code using $Tmp0 as a temporary file...
    
    rm -f "${Tmp0}"   # Clean up
    trap 0            # Allow exit status other than 1
    exit $status      # Exit with specified status
    

    如果分配不可见,那么它可能是某种遗留的碎片,或者某人选择的环境变量命名方案不是很仔细(并且文件处理有些可疑;无条件删除文件的脚本很少流行长)。

    【讨论】:

    • 我就是这么想的。只是确保它是一个我不知道的旧标准。感谢您的澄清!
    【解决方案3】:

    如果你是这个意思,那不是 shell 的硬编码变量

    您可以在代码中添加一个简单的调试以打印变量的内容,该信息可能会为您提供一些关于其用途的线索:

    echo "DEBUG: Tmp0 content is: ${Tmp0}"
    rm -f "${Tmp0}" 
    

    【讨论】:

      猜你喜欢
      • 2017-03-18
      • 2012-02-24
      • 2012-02-05
      • 2011-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-21
      相关资源
      最近更新 更多