Linux中:"为什么 echo 输出变量时要加引号"

使用双引号保护变量:Shell 会进行变量替换,但不会执行 IFS 分词和通配符扩展,变量内容会被 原样保留(包括空格、换行、Tab)。

不用双引号保护变量:Shell 会执行变量替换,然后进行如下操作:

  • 根据 IFS(默认 空格 TAB 换行)进行字段拆分,拆分后的内容使用单个空格分隔
  • 变量内容中的 * ? [] 等字符会被展开为文件名

例如:使用双引号保护变量

info=$(redis-cli -a eHIGH2014 info replication)

echo "$info"
# Replication
role:master
connected_slaves:0
master_replid:0b1a77d52e77f989511f150df857e6d8c7056067
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

例如:不使用双引号保护变量,内容会错乱

cat 1.txt 
1
2
3
4
5
6
7
info=$(cat 1.txt)

echo $info
1 2 3 4 5 6 7

posted on 2025-11-17 16:38  背对背依靠  阅读(1)  评论(0)    收藏  举报