2011-10-05 53 views
0

我试图创建一个bourne shell脚本,它将采用0个或更多的arugments并打印出最后一个arugment,我用它来编写Java和im,因此很困惑,慢慢开始学习C.Bourne Shell脚本打印出最后一个参数

+0

“Bourne shell”(根据标题)或“Bourne Again Shell(bash)”(根据标签)? – Johnsyweb

+1

如果传递0个参数,如何打印最后一个参数? –

+0

它应该不会返回任何内容。 – BeagleBoy360

回答

2
lastArg=`echo [email protected] | awk '{print $NF}'` 
+0

#!/ bin/sh 读取参数 echo“Enter args:$ args” set $ args lastArg ='echo $ @ | awk'{print $ NF}'' echo $ lastArg' – BeagleBoy360

+0

@ BeagleBoy360 - 这个评论是否说明你明白了?还是你在纠正某些问题? – jdi

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

#!/ bin/sh 阅读参数 echo“Enter args:$ args” last_arg ='echo $ * | rev | cut -d“”-f1 | rev'; echo $ last_arg – BeagleBoy360

2

这里是一个简短的Bash脚本,它会这样做:

#!/usr/bin/env bash 

echo "${!#}" 

虽然这不是Bourne shell脚本。使用read命令不会从键盘读取参数。相反,它们是在运行脚本时在命令行中提供的。例如,如果你把这个文本script.sh和运行./script.sh a b c d e将打印:

e 
+0

我应该注意到,有一点这个问题被标记为“bash”。 –

3

的替代@迈克尔的解决方案:

#!/usr/bin/env bash 
echo "${@: -1}" 
  • [email protected]与所有参数数组。
  • :用于正常拆分字符串(您可以使用echo "${USER: -1}"来验证它是否打印出用户名的最后一个字符),但也可以用于阵列以获取最后的元素。需要
  • 大括号的数组索引工作
  • 的报价仅仅是很好的做法,使代码的情况下,更为灵活的你想在其他变量混合,或者需要在一份声明中使用的值这需要一个空的字符串,而不是在没有任何参数(例如if [ "${@: -1}" = "--help" ]
0

的情况下,这应该工作:

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

这适用于/bin/shbashdash

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