簡體   English   中英

在 bash 如何使用最后一個參數 - 並將所有其他 arguments 添加到數組

[英]In bash how to use the last argument- and adding all other arguments to array

我有一個腳本,用戶可以在其中添加任意數量的 arguments(數字)。

該腳本將對最后一個數字旁邊的所有數字求和 - 最后一個數字(參數)是我需要除以的數字

例如:

./test.sh 2 2 6 5

這將對前 3 個數字 (2+2+6) 求和,然后將答案除以 5(最后一個參數)

  1. 如何使用最后一個參數? 回聲????
  2. 除了最后一個之外,我如何移動第一個 arguments 循環 – 我希望所有 3 個 arguments 都將添加到一個數組中,我可以循環它
  3. 請注意 arguments 的數量可以更改

下,您可以:

#!/bin/bash

addVals=${*: 1 : $# - 1}

bc -l <<<" ( ${addVals// /+} ) / ${@: -1} "

如何使用最后一個參數? 回聲????

授予$# > 0 ,您可以使用"${!#}"

除了最后一個之外,我如何移動第一個 arguments 循環 – 我希望所有 3 個 arguments 都將添加到一個數組中,我可以循環它

再次授予$# > 0 ,您可以參考"${@:1:$# - 1}"

閱讀 bash 手冊中的 Arrays 部分,了解如何正確擴展 arrays。

我還建議學習引用的工作原理並了解不必要的分詞和通配符的危險。

有大約一千種方法可以做到這一點。 由於您想使用 integer 算法,您可以在 bash 中執行以下操作

一個簡短的半隱秘版本是:

IFS=+
echo $(( ( ${*} - ${#:-1} ) / ${#:-1} ))

這里我們利用"${*}""${#}"之間的差異通過設置IFS=+來執行求和(參見Bash 中的 "$@" 和 "$*" 有什么區別?

一個長期的經典方法是:

for i in "$@"; do ((s+=i)); done
echo $(( (s-${@:-1})/${@:-1} ))

將所有項相加並隨后減去最后一項更容易

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM