我有一个带有以下变量分配的脚本:
TEST_VARIABLE=${3#?}
其作用是什么${3#?}
?
答案1
这就是所谓的参数扩展:
$3
是你的变量,它是脚本/函数的第三个参数。#
将删除变量的最短前缀。?
是您正在寻找的模式(在本例中是任何字符)。
因此,基本上,您删除指定变量的最短前缀,3
直到找到模式。
一般来说,我们可以考虑:
${variable_name[option][pattern]}
还有其他选项,例如:
##
删除最大的前缀。%
删除最短后缀。%%
删除最大的后缀。
您可以将其与其他模式结合使用,例如,获取 CSV 行的最后一个字段:
> string="asdf,1234,aa,foo22"
> echo ${string##*,}
foo22
请注意我们如何删除搜索模式“任何字符后跟逗号”的最大前缀。
答案2
> set -- 1 2 foo
> echo "$3"
foo
TEST_VARIABLE=${3#?}
> echo "$TEST_VARIABLE"
oo
它将不带第一个字符的第三个位置参数的值分配给变量TEST_VARIABLE
(位置参数本身不改变);在函数或 shell 脚本中使用:
./myscript 1 2 foo
# or
myfunc 1 2 foo
# within each $3 is foo
为了在交互式 shell 中拥有位置参数,您需要set
.