你知道为什么下面的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
答案 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会看到这个,这个变量是未定义的,因而是空的。相反,您应该使用{}
:
echo 'test' > Loading_${JOBID}_${TABLE}.sql;
# Here -----------------^-----^--^-----^