为什么在bash中使用printf用@打印数组只打印第一个元素?
我有一个数组 snapshots=(1 2 3 4) 当我跑步时 printf "${snapshots[*]}\n" 它按预期打印 1 2 3 4 但当我跑步时 printf "${snapshots[@]}\n" 它只是打印 1 没有换行符。我的理解是,访问数组@应该会扩展数组,因此每个元素都在换行符上,但它似乎不会这样做,printf而它确实会这样做echo。为什么是这样? ...
我有一个数组 snapshots=(1 2 3 4) 当我跑步时 printf "${snapshots[*]}\n" 它按预期打印 1 2 3 4 但当我跑步时 printf "${snapshots[@]}\n" 它只是打印 1 没有换行符。我的理解是,访问数组@应该会扩展数组,因此每个元素都在换行符上,但它似乎不会这样做,printf而它确实会这样做echo。为什么是这样? ...
我正在尝试将数组值与使用 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) ...
我想将包含单一文件格式的多个小文件的大型 zip 存档(>180 GB)下载并解压到 SSD 上,但我没有足够的存储空间来容纳 zip 存档和提取的内容。我知道可以使用答案中提到的 zip 命令从存档中提取和删除单个文件这里和这里。我还可以使用命令获取存档中所有文件的名称unzip -l,将结果存储在数组中,如上所述这里,使用给定的方法过滤掉不必要的值这里,并在 BASH 中迭代它们,如上所述这里。所以,最终的逻辑看起来像这样: 列出 zip 文件的内容并将unzip -l文件名存储在 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 上述输出...
#!/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 ...
我试图创建一个 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 数组时会发...
当我使用 时,我无法追加到数组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]=...
有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" ...
我有一个函数(不是我创建的),它在引号内输出一系列字符串: command <args> “Foo” “FooBar” “Foo Bar” “FooBar/Foo Bar” 当我尝试将它分配给一个数组(Bash;BSD/Mac)时,我得到的是 7 个元素,而不是 4 个元素。例如,对于${array[2]}我应该get “Foo Bar”,但相反,我得到的”Foo下一个元素是Bar”.任意元素没有空间工作正常(即${array[0]}=“Foo”) 如何将引号之间的每个元素(包括空格)分配给元素本身由空格(?)分隔的数组? 现在,我正在考虑使...
我有一个输入文件,姓名.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...
使用 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" ...
因此,我在 bash shell 中有一个文件数组列表,我想按修改日期对数组中的所有文件进行排序,从最旧的文件开始是数组中的第一个文件。但是,我不想对原始数组进行排序和修改,而是希望将排序结果放在不同的数组中。我看见这个线程我在其中尝试了以下命令,尽管我修改了它,因为数组是变量而不是文件。 new_array=( $(ls -t $(printf '%s\n' "${array_list[@]}")) ) 但是,数组太大,以至于 ls 报告参数列表“太长” 是否有另一种方法可以按修改日期对主数组进行排序,从最旧的文件开始,并将结果保存到不同的数组? ...
这是一些简单的测试代码。 #!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 好的,太好了。 然后如果...
我有一个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] ...
我有一长行是 git 命令的输出:a=$(git submodule foreach git status)。它看起来像这样:a =“输入'目录1/子目录' 在分支 master 上您的分支已更新为“origin/master”。没有什么可提交的,工作树干净输入'目录2' HEAD 在 xxxxxx 处分离,无需提交任何内容,工作树干净输入'目录3' 在分支 master 上您的分支已更新为“origin/master”。没有什么可提交的,工作树干净输入'目录4' 在分支 master 上您的分支已更新为“origin/master”。没有什么可承诺的,工作...