bash – 将多个不同的数组传递给shell函数
发布时间:2020-12-15 22:47:12 所属栏目:安全 来源:网络整理
导读:因为除了ksh之外的 shell不支持pass-by-reference,如何在不使用全局变量的情况下将多个数组传递给bash中的函数,并且允许将任何合法变量内容作为数组元素包含在内(不保留印记)? 解决方法 自从bash 4.3 截至2016年,现代bash支持pass-by-reference(a.k.a namer
因为除了ksh之外的
shell不支持pass-by-reference,如何在不使用全局变量的情况下将多个数组传递给bash中的函数,并且允许将任何合法变量内容作为数组元素包含在内(不保留印记)?
解决方法
自从bash 4.3
截至2016年,现代bash支持pass-by-reference(a.k.a nameref属性): demo_multiple_arrays() { local -n _array_one=$1 local -n _array_two=$2 printf '1: %qn' "${_array_one[@]}" printf '2: %qn' "${_array_two[@]}" } array_one=( "one argument" "another argument" ) array_two=( "array two part one" "array two part two" ) demo_multiple_arrays array_one array_two 另请参见手册页中的declare -n. 在bash 4.3之前 这可以通过使用调用约定来安全地完成,该约定在每个数组之前放置参数个数,如下所示: demo_multiple_arrays() { declare -i num_args array_num; declare -a curr_args; while (( $# )) ; do curr_args=( ) num_args=$1; shift while (( num_args-- > 0 )) ; do curr_args+=( "$1" ); shift done printf "$((++array_num)): %qn" "${curr_args[@]}" done } 然后可以按如下方式调用它: array_one=( "one argument" "another argument" ) array_two=( "array two part one" "array two part two" ) demo_multiple_arrays "${#array_one[@]}" "${array_one[@]}" "${#array_two[@]}" "${array_two[@]}" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |