查看bash(1)手册页中的"Array"部分,我没有找到切片数组的方法.
所以我想出了这个过于复杂的功能:
#!/bin/bash
# @brief: slice a bash array
# @arg1: output-name
# @arg2: input-name
# @args: seq args
# ----------------------------------------------
function slice() {
local output=$1
local input=$2
shift 2
local indexes=$(seq $*)
local -i i
local tmp=$(for i in $indexes
do echo "$(eval echo \"\${$input[$i]}\")"
done)
local IFS=$'\n'
eval $output="( \$tmp )"
}
Run Code Online (Sandbox Code Playgroud)
像这样使用:
$ A=( foo bar "a b c" 42 )
$ slice B A 1 2
$ echo "${B[0]}" # bar
$ echo "${B[1]}" # a …Run Code Online (Sandbox Code Playgroud) 我想知道如何在bash中声明一个2D数组然后初始化为0.
在C中它看起来像这样:
int a[4][5] = {0};
Run Code Online (Sandbox Code Playgroud)
我如何为元素赋值?如在C:
a[2][3] = 3;
Run Code Online (Sandbox Code Playgroud) 我想遍历bash中的一些列表。现在我有
array=("list1item1 list1item2" "list2item list2item2")
for list in "${array[@]}"
do
for item in $list
do
echo $item
done
done
Run Code Online (Sandbox Code Playgroud)
这行不通。有什么方法可以在bash中创建列表列表,数组数组或列表数组?
我想遍历list1,然后遍历list1中的listitems。然后遍历list2和list2中的列表项。
我正在尝试在包含在数组中的数组中创建多维。
tests=("'0' '1 2'" "'4' '5 6'")
Run Code Online (Sandbox Code Playgroud)
在测试中的每个数组中,我想要子数组。使用第一个数组“'0''1,2'”,创建另一个 for 循环以遍历子数组的内容。
我编写此代码是为了循环访问 LAN 上的用户名和域。遗憾的是,脚本没有打印任何内容。
#!/bin/bash
construct_array_of_trgts() {
declare -A usrs_n_dmns
local -a guest_dmns
local -a usrs=("j" "jim" "o" "root")
local -a guest_dmns=("raspberrypi" "lenovo")
for d in "${guest_dmns[@]}"; do
PS3="Select the users to include for sshing into $d. Q when done selecting."$'\n'
local -a targt_usrs
select u in "${usrs[@]}"; do
if [[ "$u" ]]; then
targt_usrs+=("$u")
elif [[ "$REPLY" == 'q' ]]; then
break;
fi
done
usrs_n_dmns["${d}"]="$targt_usrs"
done
}
construct_array_of_trgts
for d in "${!usrs_n_dmns[@]}"; do
targt_usrs=("${usrs_n_dmns["${d}"]}")
echo "$usrs_n_dmns"
for u in "${targt_usrs[@]}"; …Run Code Online (Sandbox Code Playgroud)