unix中"$ a"和$ a之间的区别是什么?

use*_*172 5 unix shell

例如:

#!/bin/sh
a=0
while [ "$a" -lt 10 ]
   b="$a"
   while [ "$b" -ge 0 ] do
      echo -n "$b "
     b=`expr $b - 1`
   done
   echo
   a=`expr $a + 1`
done*
Run Code Online (Sandbox Code Playgroud)

上面提到的脚本给出了三角形的答案,而没有双引号,它在diff行上一个接一个地落下.

Bar*_*mar 8

在将变量扩展为其值之后,除非变量在双引号内,否则将分词(即将值分隔为空白处的标记)和文件名通配符扩展.

例:

var='foo   bar'
echo No quotes: $var
echo With quotes: "$var"
Run Code Online (Sandbox Code Playgroud)

将输出:

No quotes: foo bar
With quotes: foo   bar
Run Code Online (Sandbox Code Playgroud)


mis*_*hik 4

这里的区别在于参数如何传递给echo函数。有效地" "保留空白。

这:

echo -n "$b "
Run Code Online (Sandbox Code Playgroud)

翻译为:

echo -n "<number><space>"
Run Code Online (Sandbox Code Playgroud)

虽然这样:

echo -n $b<space>
Run Code Online (Sandbox Code Playgroud)

将忽略尾随空格并仅输出数字:

echo -n <number>
Run Code Online (Sandbox Code Playgroud)

因此,删除输出看起来“三角形”所需的所有空格。