gpt4 book ai didi

Bash tilde *substring* 扩展 - 未记录的功能?

转载 作者:行者123 更新时间:2023-11-29 08:57:17 26 4
gpt4 key购买 nike

我很惊讶这个扩展:

$ echo "${foo:~abc}"

foo 未设置时产生空字符串。我预计它会像这样解析:

$ echo "${foo:(~abc)}"

并产生字符串“~abc”。但是相反,我发现如果我确实定义了

$ foo='abcdefg'
$ echo "${foo:~abc}"
g

事实上,它是在算术上下文中取“abc”并做的。 “${foo:~0}”。同样

$ foo='abcdefg'
$ echo "${foo:~3}"
defg

它获取扩展的最后 n+1 个字符。我查看了联机帮助页的“参数扩展”部分。我看那里没有提到代字号。 Bash Hackers Wiki只提到波浪号作为(也未记录的)大小写修饰符。

此行为至少可以追溯到 3.2.57。

我只是错过了记录这种形式的子字符串扩展的地方,还是根本没有记录?

最佳答案

它并非未记录(您可能将 ${foo:~abc}${foo-~abc} 混淆了)。

${parameter:offset}
${parameter:offset:length}
Substring Expansion. Expands to up to length characters of the
value of parameter starting at the character specified by off-
set. [...] If length is omitted, expands to the substring of the
value of parameter starting at the character specified by offset
and extending to the end of the value. length and offset are
arithmetic expressions (see ARITHMETIC EVALUATION below).

这里,~abc是展开的偏移域,~是算术表达式中的按位取反运算符。未定义的参数在算术表达式中的计算结果为 0,并且 ~0 == -1

关于Bash tilde *substring* 扩展 - 未记录的功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31703040/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com