首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么${@:-1}不返回$@的最后一个元素?

为什么${@:-1}不返回$@的最后一个元素?
EN

Stack Overflow用户
提问于 2016-10-17 01:56:29
回答 3查看 652关注 0票数 18

我想发布一个关于这个的问答,因为我没有找到任何类似的东西。如果已经存在,请将其标记为副本。

在Bash shell下运行的以下代码不起作用(应该只返回$@中的最后一个(第-1个)项f ):

$ set -- a b c d e f
$ echo ${@:-1}
a b c d e f
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-10-17 01:56:29

${parameter:-word}parameter expansion的一种

${parameter:-word}

如果参数未设置或为null,则替换word的扩展。否则,将替换参数的值。

因此,${@:-1}被解释为:

1

  • Else

  • 如果$@未设置或为null,则替换为将$@保留为

因为后者是真的,所以echo打印$@是非常出色的

解决方法:

:-之间留出一些空间

$ echo ${@: -1}
f
票数 19
EN

Stack Overflow用户

发布于 2016-10-17 02:52:37

作为Zaid建议的空格的替代语法,您还可以使用圆括号来获得所需的功能:

echo ${@:(-1)}

f

票数 10
EN

Stack Overflow用户

发布于 2016-11-06 20:20:45

一些解释

请查看bash手册页中的参数扩展一节:

  • ${parameter:-word} -> 使用默认值。如果参数为未设置或null,则word的展开为substituted...
  • ${parameter:=word} -> 赋值默认值。如果参数为未设置或null,则word的展开将分配给parameter...
  • ${parameter:?word} -> Display error。如果参数为Null或未设置,则word的展开将被写入标准错误和外壳程序,

如果$@为空,语法${@:-1}将返回1 ...

echo ${@:-1}
a b c d e f

set --
echo ${@:-1}
1

echo ${@:-It is.}
It is.

任何违反:-语法的问题都可以解决。

set -- alpha beta ceta delta enigma foo
echo ${@: -1} 
foo
echo ${@:0-1}
foo
echo ${@:(-1)}
foo
echo ${@:10#-1}
foo
echo ${@:1*-1}
foo

所有阵列都以相同的方式受到影响。

array=(Hello good world)

echo ${array[@]:-1}
Hello good world

echo ${array[@]:0-1}
world
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40073530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档