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

寻找一个示例来显示 bash 数组中 @ 和 * 之间的差异 [重复]

斜高翰
2023-03-14

x=('hello world' “HELLO”)

${#x[*]}${#x[@]} 打印相同的输出。

我理解$@$*


共有1个答案

梁研
2023-03-14

除非您有理由使用*,否则始终使用@扩展。@是为了解决问题而添加的。

两者并不总是以相同的方式扩展。涉及*的麻烦从空格和其他shell元字符(特别是引号,但$和更多)开始。

* 使元字符保持打开状态,以便 shell 再次处理它们,如果您特意将它们放入数组中,这通常是不好的。@ 通过扩展每个数组元素来保护它们,就好像它是一个单独引号的值一样,保持所有元字符不变。

 类似资料:
  • 下面有4个bash片段。我用<代码>打电话给他们。/script.sh a b c 我不知道 $ 和 * 之间的确切区别是什么,我认为“$ @”和应该是一样的,但它们不是。为什么?

  • 我将startdate和endDate作为用户的输入,将DateTime作为Flutter(Dart)中的datatype。这些字段将以时间戳格式存储在Firestore中。现在我们需要在客户端显示endDate和startDate的差异,这可以是一个实时计时器,格式为“13小时45分钟”,然后在一些分钟后,它应该是“13小时42分钟”。

  • 我有一个Dockerfile文件,其中包含一系列执行“apt get install”的运行指令;例如,几行: 执行“docker build”后,如果我执行“docker image-a”,我会看到构建过程中创建的所有基本-孩子-孩子-......图像的列表。 我想看看在执行“apt get install-y git”行时安装的所有软件包的列表(包括可能已经安装的依赖软件包,以及git软件包)

  • 问题内容: 我有以下两个数组。我想要这两个数组之间的区别。也就是说,如何找到两个数组都不存在的值? 问题答案: 注意: 这个答案将返回的值是不存在的,它不会返回值不在。

  • 我注意到以下代码在netbeans中是完全合法的: 然而eclipse对此并不满意,我必须这样初始化它: 有趣的是netbean建议不要在初始化部分指定类型参数,而是使用菱形运算符??我想知道这两种方法之间的区别。以及应该使用哪一种,这样代码就可以在不同的IDE中使用而不会有任何变化。

  • 问题内容: 我一直认为,子shell程序不是子进程,而是同一进程中的另一个shell程序环境。 我使用一组基本的内置函数: 在另一个终端上: 因此,kornShell(ksh)中没有子进程。 输入bash,使用相同的命令,其行为似乎有所不同: 因此,bash中的一个子进程。 通过阅读bash手册页,很明显,为子shell创建了另一个进程,但是它伪造了$$,这很时髦。 是bash和ksh之间的区别是