簡體   English   中英

bash語法瘋狂-如何將第三個(直到最后一個)命令行參數放入數組

[英]bash Syntax Madness - How to get third until last command line argument into an array

我有它的工作,但不能相信語法應該是那么瘋狂。 我要做的就是將所有從第三個參數開始的參數放入數組中。

例如

script.sh foo bar value1 value2 value3

應該給我一個包含value1,value2和value3的數組。 此數組用於在新函數中提供參數:

./runpy /dsnormalize.py "${values[@]}"

這有效:

args=( "$@" )
length=$((${#args[@]}-2))
values=(${args[@]:$length:2})

請告訴我這不是正確的方法。 我通常以包含所有值的字符串結尾。

bash如何處理字符串和整數? $ {}和$()之間有什么區別?

感謝您的幫助,Karsten

正確的語法是:

args_from_third=("{@:3}")

不需要插入長度,因為默認值為“其余參數”。

bash括號確實很復雜。 我在這里使用的兩個:

VARIABLE=(...)

這將創建一個名為VARIABLE的數組,其值是字符串...的空格分隔的元素。

"${@:start:length}"

從參數start擴展到參數length ; 如果省略length ,則使用其余所有參數。 參數由空格字符分隔。 因為表達式用引號引起來,所以每個參數(但不包括空格分隔符)都被視為已被引用。

${...}涵蓋了很多可能性,包括子字符串,搜索和替換以及大小寫更改。 有關詳細信息,請參見bash手冊

一種更簡單的方法是使用shift刪除固定參數。

first_arg=$1
second_arg=$2
shift 2
the_rest=("$@")

和:

bash如何處理字符串和整數? ${}$()之間的區別是什么?

${}用於獲取變量的值。 如果您只是編寫$foo ,則大括號是可選的,但是對於更復雜的事情(例如,訪問數組的元素)則需要使用大括號。

$()捕獲命令的輸出,類似於反引號。 這與您正在使用的$(( ))不同。

$(( ))計算一個算術表達式。 它使您可以執行基本的整數和布爾運算。

暫無
暫無

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

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