${3#?} 的作用是什么?

${3#?} 的作用是什么?

我有一个带有以下变量分配的脚本:

TEST_VARIABLE=${3#?}

其作用是什么${3#?}

答案1

这就是所谓的参数扩展:

  1. $3是你的变量,它是脚本/函数的第三个参数。
  2. #将删除变量的最短前缀。
  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.

相关内容