考虑以下代码:
a=(1 2 3)
a='seven'
export a
declare -p a
输出(来自declare
) is:
declare -ax a='([0]="seven" [1]="2" [2]="3")'
So a
是一个数组。问题:
- 如何改变第二行,所以
a
将不再是一个数组,而是一个带有值的简单变量seven
?我正在寻找一个单线,没有unset
etc.
- 将变量分配给数组仅替换第一个元素,而不是整个数组。此行为在哪里指定?
注意:Bash v.3.2.48 (OS X)。
(我已经回答了这个问题 https://stackoverflow.com/questions/18568933/joining-array-into-path-in-bash-on-osx/今天,这让我思考这个问题,我正在寻找一个更干净的解决方案)。
Edit:我正在寻找一个:
a=(1 2 3)
/* One line here please :) */
unset a
a='seven'
export a
declare -p a
但没有做明确的unset
。在特殊情况下很重要a
实际上是一个PATH
变量(参见this https://stackoverflow.com/questions/18568933/joining-array-into-path-in-bash-on-osx/问题)。
你需要使用unset
.
手册中的第一句话(如下所示)将解释这一点:
a='seven'
when a
之前是一个数组是完全相同的说:
a[0]='seven'
引用自manual http://www.gnu.org/software/bash/manual/bashref.html#Arrays:
当分配给索引数组时,如果可选下标是
提供后,该索引被分配给;否则索引
分配的元素是语句 plus 分配的最后一个索引
一。索引从零开始。
The unset
内置函数用于销毁数组。unset
名称[下标]销毁索引处的数组元素下标。必须注意
避免由文件名扩展引起的不必要的副作用。未设置名称,
其中 name 是一个数组,删除整个数组。下标为‘*’
or ‘@’
还删除整个数组。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)