第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
,也不适用于多个单词。
答案 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)
您可以将IFS
与read
:
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>