Kar*_*ten 1 arrays bash command-line-arguments
我有它工作,但不能相信语法应该是疯了.我想做的就是将所有以第三个开头的参数放入一个数组中.
例如
script.sh foo bar value1 value2 value3
Run Code Online (Sandbox Code Playgroud)
应该给我一个包含value1,value2和value3的数组.该数组用于在新函数中提供参数:
./runpy /dsnormalize.py "${values[@]}"
Run Code Online (Sandbox Code Playgroud)
这有效:
args=( "$@" )
length=$((${#args[@]}-2))
values=(${args[@]:$length:2})
Run Code Online (Sandbox Code Playgroud)
请告诉我这不是正确的方法.我通常最终得到一个包含所有值的字符串.
bash如何处理字符串和整数?$ {}和$()之间的区别是什么?
谢谢你的帮助,卡斯滕
正确的语法是:
args_from_third=("{@:3}")
Run Code Online (Sandbox Code Playgroud)
没有必要插入长度,因为默认值是"其余参数".
bash圆括号是复杂的,这当然是正确的.我在这里使用的两个:
VARIABLE=(...)
Run Code Online (Sandbox Code Playgroud)
这将创建一个名为的数组VARIABLE,其值是字符串的空白分隔元素....
"${@:start:length}"
Run Code Online (Sandbox Code Playgroud)
这扩展到从length参数开始的参数start; 如果length省略,则使用所有其余参数.参数由空格字符分隔.因为引用了表达式,所以每个参数(但不是空格分隔符)都被视为引用它.
${...}涵盖了很多可能性,包括子串,搜索和替换以及大小写更改.看看bash的手册了解详情.