[英]Copy all arguments but the last and paste them in the last argument in Bash
[英]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(最后一個參數)
在bash下,您可以:
#!/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.