当前位置: 首页 > 知识库问答 >
问题:

unix中的"$a"和$a有什么区别[重复]

薛利
2023-03-14

例如:

#!/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*

上面提到的脚本用三角形给出答案,而没有双引号,它一个接一个地落在不同的线上。

共有3个答案

慕兴平
2023-03-14

您的脚本中有错误:

  • 第一次之后没有do,而

现在来回答你的问题。如果用作参数:

  • “$a”是一个参数

比较:

v='a b';  set $v; echo "\$#=$#, \$1=\"$1\",  \$2=\"$2\""  
$#=2, $1="a",  $2="b"

v='a b'; set "$v"; echo "\$#=$#, \$1=\"$1\",  \$2=\"$2\""  
$#=1, $1="a b",  $2=""

方航
2023-03-14

这里的区别在于参数如何传递给echo函数。实际上,将保留空白。

这:

echo -n "$b "

翻译为:

echo -n "<number><space>"

而这:

echo -n $b<space>

将忽略尾随空格,只输出数字:

echo -n <number>

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

欧阳骏俊
2023-03-14

变量扩展到其值后,会进行分词(即在空白处将值分隔为标记)和文件名通配符扩展,除非变量位于双引号内。

例子:

var='foo   bar'
echo No quotes: $var
echo With quotes: "$var"

将输出:

No quotes: foo bar
With quotes: foo   bar
 类似资料:
  • 问题内容: public void push(E element) { if (size == elements.length) { resize(); // doubel of size } elements[size++] = element; } Java中的a 和 a或a–和–a有什么区别 谢谢 问题答案: 或是后缀运算符,表示a的值将在对表达式求值后更改。 或是前缀运算,表示a的值将在对

  • 问题内容: 正如我在标题中提到的 a + = b和a = + b以及a 和 a有什么区别?我有点困惑 问题答案: 相当于 相当于 且两者都增加1。不同之处在于,返回的是增量之前的值,而返回的是增量之后的值。 那是:

  • Java的(“A”)和“A”有什么区别? 为什么下面的两行给出的结果是一样的?它们之间有什么区别吗?

  • 问题内容: 我是JAVA的新手,刚刚开始学习IS-A和HAS-A的关系,但学到的东西不多。我想想像一下这两者有何不同以及何时应使用IS-A和HAS-A? 问题答案: IS-A关系是继承。继承的类称为子类或子类。另一方面,HAS-A关系是组成。 在OOP中,IS-A关系是完全继承。这意味着子类是父类的一种。例如,苹果是水果。因此,您将扩展水果以获得苹果。 另一方面,组合意味着创建引用了其他对象的实例

  • 问题内容: 我是一名新的Java学习者。最近,我在阅读泛型编程,并对此感到困惑。 问题答案: 首先,这些是在不同上下文中使用的完全不同的构造。 是通用类型声明的一部分,例如 它使用类型参数声明泛型类型,并引入界限,因此必须是的子类型。 是带通配符的参数化类型,可以作为普通类型用于变量和方法声明等中: 变量声明诸如装置类型的该被参数化与一些亚型。 例如,给出此声明 您可以: 将的某些子类型分配给:

  • 问题内容: 如果我写下面的代码(在java中): 我的输出是:“等于”,但是如果我将第一行和第二行更改为-> 那么我的输出是: 那么创建Integer对象有什么区别?当我们这样做时如何创建它? 如果我创建并创建另一个对象,是否意味着a和b对象引用相同的对象? 问题答案: ; 称为自动装箱,编译器将此表达式转换为实际 对于较小的数字,默认情况下为-128到127,Integer.valueOf(in