shell输出文件的奇怪行为(Linux)

时间:2016-07-30 08:00:47

标签: linux bash shell

你知道为什么下面的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

3 个答案:

答案 0 :(得分:3)

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 ]必须为您阅读。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

_不是shell中的特殊字符。所以当你回显$JOBID_变量时,shell会看到这个,这个变量是未定义的,因而是空的。相反,您应该使用{}

明确地向shell显示您的变量
echo 'test'  > Loading_${JOBID}_${TABLE}.sql;
# Here -----------------^-----^--^-----^