Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
shell输出文件的奇怪行为(Linux)_Linux_Bash_Shell - Fatal编程技术网

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

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的变量。用{}将名称括起

您知道为什么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
的变量。用
{}
将名称括起来

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<代码>以容纳具有空格的文件名。只有当您有空格或其他奇怪字符时,这些才是重要的。他的剧本显然没有受到影响。我现在明白了。非常感谢你!感谢您接受答案,祝您周末愉快;)我现在明白了。非常感谢你!感谢您接受答案,祝您周末愉快;)