Bourne Shell Script打印出最后一个参数

时间:2011-10-05 02:59:15

标签: shell unix

我试图创建一个bourne shell脚本,它将占用0个或更多的arugments并打印出最后一个arugment,我用来编写Java而我很困惑,慢慢开始学习C。

5 个答案:

答案 0 :(得分:3)

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

#!/usr/bin/env bash
echo "${@: -1}"
  • $@是包含所有参数的数组。
  • :用于正常拆分字符串(您可以使用echo "${USER: -1}"来验证它是否打印了您的用户名的最后一个字符),但也可以用于数组以获取最后一个字符串元素
  • 数组索引工作需要花括号
  • 引用只是一种很好的做法,为了使代码更加灵活,以防你想要混合其他变量,或者需要在需要空字符串的语句中使用该值,而不是在没有参数的情况下使用该值(例如if [ "${@: -1}" = "--help" ]

答案 1 :(得分:2)

lastArg=`echo $@ | awk '{print $NF}'`

答案 2 :(得分:2)

以下是一个简短的Bash脚本:

#!/usr/bin/env bash

echo "${!#}"

但这不是Bourne shell脚本。使用read命令不会从键盘读取Args。相反,它们在运行脚本时在命令行上提供。例如,如果您将此文本放在script.sh并运行./script.sh a b c d e,则会打印:

e

答案 3 :(得分:0)

在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];
     [...]
}

答案 4 :(得分:0)

这应该有效:

eval lastarg='$'$#
echo last arg is $lastarg

这适用于/bin/sh bashdash

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