我正在尝试像这样设置函数swap()
swap(){
#swap $1 and $2 here
}
我要交换的是一个数组,假设我们有
array[0]=12
array[1]=45
array[2]=99
swap $array[0] $array[1]
所以我想交换数组[0],使其变为45,并且数组[1]在交换函数之后变为12。我正在考虑通过引用$ array [0](例如c中的指针)和$ array [1]进行交换,以便可以更改它。 我找到了命令eval和upvar,但严肃地说,我不明白一件事。我对这个shell脚本很新,而且大部分文档都让我很困惑。
答案 0 :(得分:0)
array
数组有点棘手。你能做的最清楚的事情就是编写函数来获取三个参数,数组名和交换的两个索引。这也要求您将bash
视为全局变量;你根本无法将整个数组作为bash
中的单个对象传递。
(这需要-g
4或更高版本,它会将declare
标记引入swap () {
local name=$1
local a=$2
local b=$3
local aname=$name[$a]
local bname=$name[$b]
local tmp=${!aname} # e.g. tmp=${array[$a]}
declare -g "${aname}=${!bname}" # e.g. array[$a]=${array[$b]}
declare -g "${bname}=$tmp" # e.g. array[$b]=$tmp
}
。)
bash
(declare -n)
4.3引入了namerefs swap () {
declare -n arr=$1
local a=$2 b=$3
local tmp=${arr[$a]}
arr[$a]=${arr[$b]}
arr[$b]=$tmp
,它通过让你声明一个充当全局数组别名的本地数组来大大简化这一过程。
Concat
}