2011-10-05 54 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進行測試,無論那是什麼。