gpt4 book ai didi

arrays - 将单个变量分配给数组(就地)

转载 作者:行者123 更新时间:2023-11-29 09:28:26 26 4
gpt4 key购买 nike

考虑以下代码:

a=(1 2 3)
a='seven'

export a
declare -p a

输出(来自declare)是:

declare -ax a='([0]="seven" [1]="2" [2]="3")'

所以a是一个数组。问题:

  1. 如何更改第二行,使 a 不再是一个数组,而是一个值为 seven 的简单变量?我正在寻找没有 unset 等的单行代码。
  2. 将变量分配给数组只会替换第一个元素,而不是整个数组。此行为在何处指定?

注意:Bash v. 3.2.48 (OS X)。

(我今天回答了 this question,这让我开始思考这个问题,我正在寻找更简洁的解决方案)。


编辑:我正在寻找:

a=(1 2 3)

/* One line here please :) */
unset a
a='seven'

export a
declare -p a

但没有做明确的unset。在特殊情况下,a 实际上是一个 PATH 变量(参见 this 问题)。

最佳答案

您需要使用unset

手册中的第一段引述(如下所示)会解释说:

a='seven'

a 之前是一个数组时,等同于说:

a[0]='seven'

引自manual :

When assigning to indexed arrays, if the optional subscript is supplied, that index is assigned to; otherwise the index of the element assigned is the last index assigned to by the statement plus one. Indexing starts at zero.


The unset builtin is used to destroy arrays. unset name[subscript] destroys the array element at index subscript. Care must be taken to avoid unwanted side effects caused by filename expansion. unset name, where name is an array, removes the entire array. A subscript of ‘*’ or ‘@’ also removes the entire array.

关于arrays - 将单个变量分配给数组(就地),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18570308/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com