Bash 它只显示一个数字;2“;使用while read line将一个文件的内容重定向到另一个文件时

Bash 它只显示一个数字;2“;使用while read line将一个文件的内容重定向到另一个文件时,bash,shell,Bash,Shell,脚本的内容是: #!/bin/bash tempconf="/tmp/test.file" while read line do echo $line done < test.conf > $tempconf 输出文件“/tmp/test.file”的内容是: 问题是,为什么[H323H]变成2。如果有人能给我解释一下,我将不胜感激。[]对shell有特殊的意义,它的意思是“从括号中的任何字符中提取一个字符”。所以当你跑步的时候 echo [H323H] she

脚本的内容是:

#!/bin/bash

tempconf="/tmp/test.file"
while read line
do
        echo $line
done < test.conf > $tempconf
输出文件“/tmp/test.file”的内容是:


问题是,为什么
[H323H]
变成
2
。如果有人能给我解释一下,我将不胜感激。

[]
对shell有特殊的意义,它的意思是“从括号中的任何字符中提取一个字符”。所以当你跑步的时候

echo [H323H]
shell将查找名为或H、或2或3的文件。。。如果至少有一个文件匹配,
[H323H]
将替换为输出中所有匹配的文件名;否则就照原样复制

资料来源:

$line
周围使用引号可以解决您的问题,而无需检查与这些字符匹配的文件(这会使脚本不太健壮)

#/bin/bash
tempconf=“/tmp/test.file”
而read-r行
做
回音“$line”
完成“$tempconf”

在运行脚本的目录中是否有名为
2
的文件?请运行脚本shellcheck@Shawn是的,有一个名为“2”的文件。我将删除id并重试。这是一个典型的示例,说明了为什么需要引用shell脚本中的变量。。。
[PORT]
tcp_ports=7000-7200
udp_ports=7000-8000, 40000-49999

2
maxSendThreads=10
maxRecvThreads=10

[SDK]
appPwd=1111111
amsAddress=192.168.222.208:8888
echo [H323H]
#!/bin/bash

tempconf="/tmp/test.file"
while read -r line
do
    echo "$line"
done < test.conf > "$tempconf"