【问题标题】:Strange behavior of shell output file ( Linux )shell输出文件的奇怪行为(Linux)
【发布时间】:2016-07-30 08:00:46
【问题描述】:

你知道为什么下面的 shell 脚本只生成名为 'Loading_EMP.sql' 而不是 'Loading_1_EMP.sql' 的输出文件吗?

#!/bin/bash

JOBID="1"
TABLE="EMP"

echo 'test'  > Loading_$JOBID_$TABLE.sql; 

# Output
Loading_EMP.sql

# Expected Output
Loading_1_EMP.sql

【问题讨论】:

标签: linux bash shell


【解决方案1】:
echo 'test'  > Loading_${JOBID}_${TABLE}.sql; 

应该这样做,或者更好

echo 'test'  > "Loading_${JOBID}_${TABLE}.sql" # to avoid word splitting

Loading_$JOBID_$TABLE 中,shell 将$JOBID_ 视为单个变量,并且由于未设置它,因此它将替换$JOBID_,而不会导致Loading_EMP.sql


[ answer ] 必须为您阅读。

【讨论】:

  • 我现在明白了。非常感谢!
  • 感谢您的回答,祝您周末愉快;)
【解决方案2】:

_ 不是 shell 中的特殊字符。因此,当您回显 $JOBID_ 变量时,shell 会看到这一点,该变量未定义,因此为空。相反,您应该使用 {} 明确地向 shell 显示您的变量是什么:

echo 'test'  > Loading_${JOBID}_${TABLE}.sql;
# Here -----------------^-----^--^-----^

【讨论】:

    【解决方案3】:

    解释器认为您指的是一个名为JOBID_ 的变量。用{} 将名称括起来。

    echo 'test'  > Loading_${JOBID}_$TABLE.sql
    

    【讨论】:

    • 您可以考虑使用双引号 Loading_${JOBID}_$TABLE.sql 来容纳带空格的文件名。
    • 只有当你有空格或其他奇怪的字符时才重要。他的剧本显然没有受此影响。
    猜你喜欢
    • 2014-06-17
    • 1970-01-01
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多