第N个字的变量直到结束

时间:2014-04-29 20:23:52

标签: bash

第N个字是否有变量直到结束?

例如./script One Two Three

$1是One,$2-是Two Three。这可能吗?

编辑1:为了更详细地说明,我正在运行一个命令,例如./script 01-JAN-14 02-JAN-14 site,其中site可以是多个单词(但直到这一点$3已经足够script)。

编辑2:我运行./script date1 date2 site运行SQL查询,使用传递给它的变量,例如WHERE date BETWEEN '$1' AND '$2'然后AND site = '${@: -3}'。这是正确的,因为它不再适用于单个单词site,也不适用于多个单词。

3 个答案:

答案 0 :(得分:7)

可以在bash中使用例如"${@: -3:1}",即将参数变量切割为数组。

$ set -- one two three four five six seven eight nine ten
$ echo "$@"
one two three four five six seven eight nine ten
$ n=-4
$ echo "${@:$n:1}"
seven

使用文字整数时,:和负号之间的空格是必需的,但在使用变量扩展到偏移量("${@: -1:1}" vs "${@:$n:1}")时则不需要。

要获取参数变量(或数组)的所有成员,请忽略扩展表达式的第二部分:

"${@: -3}" # third-to-last to last

答案 1 :(得分:4)

并不是一个特定的变量,意味着"休息"参数,但您可以使用shift获得该效果。 script的内容:

echo $1
shift
echo $@

试运行:

$ ./script one two three
one
two three

答案 2 :(得分:0)

您可以将IFSread

一起使用
func() { IFS=' ' && read a b <<< $@; echo "<$a><$b>"; }

<强>测试

func One Two Three
<One><Two Three>

func One Two Three four five six seven eight nine ten
<One><Two Three four five six seven eight nine ten>