bash-array

为什么在bash中使用printf用@打印数组只打印第一个元素?
bash-array

为什么在bash中使用printf用@打印数组只打印第一个元素?

我有一个数组 snapshots=(1 2 3 4) 当我跑步时 printf "${snapshots[*]}\n" 它按预期打印 1 2 3 4 但当我跑步时 printf "${snapshots[@]}\n" 它只是打印 1 没有换行符。我的理解是,访问数组@应该会扩展数组,因此每个元素都在换行符上,但它似乎不会这样做,printf而它确实会这样做echo。为什么是这样? ...

Admin

使用 bc 进行 bash 数组乘法
bash-array

使用 bc 进行 bash 数组乘法

我正在尝试将数组值与使用 bc 循环索引相乘得出的值相乘。 #!/bin/bash n=10.0 bw=(1e-3 2.5e-4 1.11e-4 6.25e-5 4.0e-5 2.78e-5 2.04e-5 1.56e-5 1.29e-5 1.23e-5 1.0e-5) for k in {1..11};do a=$(echo "$n * $k" | bc) echo "A is $a" arn=${bw[k-1]} echo "Arn is $arn" b=$(echo "$arn * $a" | bc -l) ...

Admin

如何同时提取和删除 zip 存档的内容?
bash-array

如何同时提取和删除 zip 存档的内容?

我想将包含单一文件格式的多个小文件的大型 zip 存档(>180 GB)下载并解压到 SSD 上,但我没有足够的存储空间来容纳 zip 存档和提取的内容。我知道可以使用答案中提到的 zip 命令从存档中提取和删除单个文件这里和这里。我还可以使用命令获取存档中所有文件的名称unzip -l,将结果存储在数组中,如上所述这里,使用给定的方法过滤掉不必要的值这里,并在 BASH 中迭代它们,如上所述这里。所以,最终的逻辑看起来像这样: 列出 zip 文件的内容并将unzip -l文件名存储在 bash 数组中,使用正则表达式来匹配存档中存在的单个文件扩展名...

Admin

访问关联数组的值,其名称作为 bash 函数内的参数传递
bash-array

访问关联数组的值,其名称作为 bash 函数内的参数传递

我在 bash 脚本中有一些关联数组,我需要将它们传递给一个函数,在该函数中我还需要访问键和值。 declare -A gkp=( \ ["arm64"]="ARM-64-bit" \ ["x86"]="Intel-32-bit" \ ) fv() { local entry="$1" echo "keys: ${!gkp[@]}" echo "vals: ${gkp[@]}" local arr="$2[@]" echo -e "\narr entries: ${!arr}" } fv $1 gkp 上述输出...

Admin

如何从数组数组中选择要循环的数组?
bash-array

如何从数组数组中选择要循环的数组?

#!/usr/bin/bash ARGENT=("Nous devons économiser de l'argent." "Je dois économiser de l'argent.") BIENETRE=("Comment vas-tu?" "Tout va bien ?") aoarrs=("${ARGENT}" "${BIENETRE}") select arr in "${aoarrs[@]}"; do for el in "${arr[@]}"; do echo "$el" done break done ...

Admin

如果我使用大索引启动 bash 数组会发生什么?
bash-array

如果我使用大索引启动 bash 数组会发生什么?

我试图创建一个 bash“多维”数组,我看到了使用关联数组的想法,但我认为最简单的方法如下: for i in 0 1 2 do for j in 0 1 2 do a[$i$j]="something" done done 设置和获取值很容易,但是如果 bash 为从索引 00 到 22 的元素顺序分配空间(我的意思是分配位置 {0,1,2,3, 4,...,21,22}),而不仅仅是实际设置的元素:{00,01,02,10,11,...,21,22}。 这让我想知道,当我们以索引“n”启动 bash 数组时会发...

Admin

无法使用并行附加到数组
bash-array

无法使用并行附加到数组

当我使用 时,我无法追加到数组parallel,使用 for 循环没有问题。 并行示例: append() { arr+=("$1"); } export -f append parallel -j 0 append ::: {1..4} declare -p arr 输出: -bash: declare: arr: not found 对于循环: for i in {1..4}; do arr+=("$i"); done declare -p arr 输出: declare -a arr=([0]="1" [1]="2" [2]="3" [3]=...

Admin

创建并附加到数组,mapfile 与 arr+=(input) 相同,还是我遗漏了什么?
bash-array

创建并附加到数组,mapfile 与 arr+=(input) 相同,还是我遗漏了什么?

有mapfile没有好处超过的情况arr+=(input)? 简单的例子 映射文件数组名称,arr: mkdir {1,2,3} mapfile -t arr < <(ls) declare -p arr 输出: declare -a arr=([0])="1" [1]="2" [2]="3") 编辑: 更改了以下标题;正文具有y数组名称,但标题具有arr名称,这可能会导致混乱。 y+=(输入) IFS=$'\n' y+=($(ls)) declare -p y 输出: declare -a y=([0])="1" [1]="2" ...

Admin

Bash:将带有空格和引号的字符串转换为数组
bash-array

Bash:将带有空格和引号的字符串转换为数组

我有一个函数(不是我创建的),它在引号内输出一系列字符串: command <args> “Foo” “FooBar” “Foo Bar” “FooBar/Foo Bar” 当我尝试将它分配给一个数组(Bash;BSD/Mac)时,我得到的是 7 个元素,而不是 4 个元素。例如,对于${array[2]}我应该get “Foo Bar”,但相反,我得到的”Foo下一个元素是Bar”.任意元素没有空间工作正常(即${array[0]}=“Foo”) 如何将引号之间的每个元素(包括空格)分配给元素本身由空格(?)分隔的数组? 现在,我正在考虑使...

Admin

使用 gnu parallel 迭代数组元素
bash-array

使用 gnu parallel 迭代数组元素

我有一个输入文件,姓名.txt,每行 1 个单词: apple abble aplle 通过我的 bash 脚本,我试图实现以下输出: apple and apple apple and abble apple and aplle abble and apple abble and abble abble and aplle aplle and apple aplle and abble aplle and aplle 这是我的 bash 脚本 #!/usr/bin bash readarray -t seqco...

Admin

Bash 4.4 本地只读数组变量范围:bug?
bash-array

Bash 4.4 本地只读数组变量范围:bug?

使用 bash 4.4.20(1) 运行以下脚本时失败 #!/bin/bash bar() { local args=("y") } foo() { local -r args=("x") bar } foo 有错误line 3: args: readonly variable,但使用 bash 4.2.46(2) 运行时成功,阅读后有意义24.2.局部变量。 以下带有非数组变量的脚本运行时没有任何问题: #!/bin/bash bar() { local args="y" } foo() { local -r args="x" ...

Admin

按日期对 bash 中的文件数组列表进行排序并绕过参数限制
bash-array

按日期对 bash 中的文件数组列表进行排序并绕过参数限制

因此,我在 bash shell 中有一个文件数组列表,我想按修改日期对数组中的所有文件进行排序,从最旧的文件开始是数组中的第一个文件。但是,我不想对原始数组进行排序和修改,而是希望将排序结果放在不同的数组中。我看见这个线程我在其中尝试了以下命令,尽管我修改了它,因为数组是变量而不是文件。 new_array=( $(ls -t $(printf '%s\n' "${array_list[@]}")) ) 但是,数组太大,以至于 ls 报告参数列表“太长” 是否有另一种方法可以按修改日期对主数组进行排序,从最旧的文件开始,并将结果保存到不同的数组? ...

Admin

因尝试在 Bash 数组中使用十进制值而陷入困境
bash-array

因尝试在 Bash 数组中使用十进制值而陷入困境

这是一些简单的测试代码。 #!bin/bash cpm=(0 1 0.094) lv=1 attack=5 defense=9 stamina=16 echo $((cpm[lv])) mycpm=$((cpm[lv])) #mycpm=`echo "0.094" | bc -l` cq=`echo "$attack*$defense*1/10*sqrt($stamina)*2^2*$mycpm" | bc -l` echo $cq 终端输出: bash testing.sh 1 72.00000000000000000000 好的,太好了。 然后如果...

Admin

如何对索引数组进行切片以获得第一个索引和最后一个索引之间的所有元素?
bash-array

如何对索引数组进行切片以获得第一个索引和最后一个索引之间的所有元素?

我有一个tokens包含tokens=( first one two three last ).( one two three )如果我不知道数组中有多少个数字,如何获取值?我想访问first和last(不包括)之间的所有内容。 echo ${tokens[*]:1:3} 会给出one two three,但如果我不知道数组的长度,我怎样才能获得之后first和之前的所有元素last?我正在寻找类似于在Python中使用负索引的东西,例如tokens[1:-1] ...

Admin

如何使用 IFS 和 read 或任何其他方法将长字符串分成字符串数组
bash-array

如何使用 IFS 和 read 或任何其他方法将长字符串分成字符串数组

我有一长行是 git 命令的输出:a=$(git submodule foreach git status)。它看起来像这样:a =“输入'目录1/子目录' 在分支 master 上您的分支已更新为“origin/master”。没有什么可提交的,工作树干净输入'目录2' HEAD 在 xxxxxx 处分离,无需提交任何内容,工作树干净输入'目录3' 在分支 master 上您的分支已更新为“origin/master”。没有什么可提交的,工作树干净输入'目录4' 在分支 master 上您的分支已更新为“origin/master”。没有什么可承诺的,工作...

Admin