shell输出文件的奇怪行为(Linux)
您知道为什么below shell脚本只生成名为“Loading_EMP.sql”而不是“Loading_1_EMP.sql”的输出文件吗shell输出文件的奇怪行为(Linux),linux,bash,shell,Linux,Bash,Shell,您知道为什么below 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 解释器认为您引用的是一个名为JOBID\uu的变量。用{}将名称括起
#!/bin/bash
JOBID="1"
TABLE="EMP"
echo 'test' > Loading_$JOBID_$TABLE.sql;
# Output
Loading_EMP.sql
# Expected Output
Loading_1_EMP.sql
解释器认为您引用的是一个名为
JOBID\uu
的变量。用{}
将名称括起来
echo 'test' > Loading_${JOBID}_$TABLE.sql
解释器认为您引用的是一个名为
JOBID\uu
的变量。用{}
将名称括起来
echo 'test' > Loading_${JOBID}_$TABLE.sql
应该这样做,还是更好
echo 'test' > "Loading_${JOBID}_${TABLE}.sql" # to avoid word splitting
在Loading.$JOBID.$TABLE
中,shell将$JOBID.
列为单个变量,由于未设置该变量,因此它将$JOBID.
替换为$JOBID.
,不会导致加载EMP.sql
这一定是给你读的 应该这样做,还是更好
echo 'test' > "Loading_${JOBID}_${TABLE}.sql" # to avoid word splitting
在Loading.$JOBID.$TABLE
中,shell将$JOBID.
列为单个变量,由于未设置该变量,因此它将$JOBID.
替换为$JOBID.
,不会导致加载EMP.sql
这必须为您阅读。
\u
不是shell中的特殊字符。因此,shell会在您回显$JOBID\uuz
变量时看到这一点,该变量未定义,因此为空。相反,您应该使用{}
显式地向shell显示变量:
echo 'test' > Loading_${JOBID}_${TABLE}.sql;
# Here -----------------^-----^--^-----^
\
不是shell中的特殊字符。因此,shell会在您回显$JOBID\uuz
变量时看到这一点,该变量未定义,因此为空。相反,您应该使用{}
显式地向shell显示变量:
echo 'test' > Loading_${JOBID}_${TABLE}.sql;
# Here -----------------^-----^--^-----^
除了可变插补问题之外,还有一个问题:丢失双引号:@ JavaBug:除了变量插值问题之外,还有一个丢失双引号的问题。您可能会考虑双引号<代码>加载项${JOBID}。_$TABLE.sql以容纳带有空格的文件名。只有当您有空格或其他奇怪字符时,这些才重要。他的脚本显然不受此影响。您可以考虑双引用<代码>加载项${JOBID} $TABLE。SQL<代码>以容纳具有空格的文件名。只有当您有空格或其他奇怪字符时,这些才是重要的。他的剧本显然没有受到影响。我现在明白了。非常感谢你!感谢您接受答案,祝您周末愉快;)我现在明白了。非常感谢你!感谢您接受答案,祝您周末愉快;)