Bourne Shell 脚本打印最后一个参数

发布于 2024-12-08 04:30:41 字数 86 浏览 0 评论 0原文

我正在尝试创建一个 bourne shell 脚本,它将接受 0 个或多个参数并打印出最后一个参数,我习惯于编写 Java,对此感到很困惑,慢慢开始学习 C。

Im trying to create a bourne shell script that will take 0 or more arugments and print out the last arugment, I am use to writing Java and im so confused by this, slowly starting to learn C.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

冷情妓 2024-12-15 04:30:41

@Michael 解决方案的替代方案:

#!/usr/bin/env bash
echo "${@: -1}"
  • $@ 是包含所有参数的数组。
  • : 用于正常分割字符串(您可以尝试使用 echo "${USER: -1}" 来验证它是否打印您用户名的最后一个字符) ,但也可以用于数组来获取最后一个元素
  • 数组索引需要大括号。
  • 引号只是一个很好的实践,可以使代码更加灵活,以防您想要混合其他变量,或者需要在需要空字符串的语句中使用该值如果没有参数,则比没有任何内容(例如 if [ "${@: -1}" = "--help" ]

An alternative to @Michael's solution:

#!/usr/bin/env bash
echo "${@: -1}"
  • $@ is the array with all the parameters.
  • : is used to split strings normally (you can try this with echo "${USER: -1}" to verify that it prints the last character of your user name), but can also be used for arrays to get the last element.
  • The curly brackets are needed for the array indexing to work
  • The quotes are simply good practice, to make the code more flexible in case you want to mix in other variables, or the value needs to be used in a statement which needs an empty string rather than nothing in case of no parameters (for example if [ "${@: -1}" = "--help" ])
我不吻晚风 2024-12-15 04:30:41
lastArg=`echo $@ | awk '{print $NF}'`
lastArg=`echo $@ | awk '{print $NF}'`
荒人说梦 2024-12-15 04:30:41

这是一个简短的 Bash 脚本,可以完成此操作:

#!/usr/bin/env bash

echo "${!#}"

不过,这不是 Bourne shell 脚本。参数不是使用 read 命令从键盘读取的。相反,它们是在运行脚本时在命令行上提供的。例如,如果您将此文本放入 script.sh 并运行 ./script.sh abcd e 它将打印:

e

Here is a short Bash script that will do it:

#!/usr/bin/env bash

echo "${!#}"

This is not a Bourne shell script, though. Args are not read from the keyboard with the read command. Instead they are supplied on the command line when running your script. For example, if you put this text in script.sh and run ./script.sh a b c d e it will print:

e
向日葵 2024-12-15 04:30:41

在 bash 中:

last_arg=`echo $* | rev | cut -d " " -f1 | rev`;
echo $last_arg

你的问题提到了 C。在 C 中更容易:

int main (int argc, char *argv[]) {
     char *last_arg = argv[argc - 1];
     [...]
}

In bash:

last_arg=`echo $* | rev | cut -d " " -f1 | rev`;
echo $last_arg

Your question mentions C. In C its easier:

int main (int argc, char *argv[]) {
     char *last_arg = argv[argc - 1];
     [...]
}
固执像三岁 2024-12-15 04:30:41

这应该有效:

eval lastarg='

这适用于 /bin/shbashdash

我无法用“真正的”/bin/sh 来测试它,无论它是什么。

$# echo last arg is $lastarg

这适用于 /bin/shbashdash

我无法用“真正的”/bin/sh 来测试它,无论它是什么。

This should work:

eval lastarg='

This works with /bin/sh being bash or dash.

I am unable to test it with a "real" /bin/sh, whatever that would be.

$# echo last arg is $lastarg

This works with /bin/sh being bash or dash.

I am unable to test it with a "real" /bin/sh, whatever that would be.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文