[shell] 쉘 스크립트에 전달 된 마지막 인수 얻기

$1첫 번째 주장입니다.
$@그들 모두입니다.

쉘 스크립트에 전달 된 마지막 인수를 어떻게 찾을 수 있습니까?



답변

이것은 약간의 해킹입니다.

for last; do true; done
echo $last

이것은 또한 이식성이 뛰어나며 (다시 말해서, bash, ksh 및 sh와 함께 작동해야 함) 인수를 이동시키지 않으므로 멋질 수 있습니다.

for루프 오버 대상을 알려주지 않으면 인수 를 암시 적으로 반복한다는 사실과 루프 변수의 범위가 지정되지 않았다는 사실을 사용합니다. 설정된 마지막 값을 유지합니다.


답변

이것은 배쉬 전용입니다.

echo "${@: -1}"


답변

$ set quick brown fox jumps

$ echo ${*: -1:1} # last argument
jumps

$ echo ${*: -1} # or simply
jumps

$ echo ${*: -2:1} # next to last
fox

공백은 기본값으로 해석되지 않도록 필요 합니다 .

이것은 bash 전용입니다.


답변

bash 3.0 이상에 대한 가장 간단한 대답은

_last=${!#}       # *indirect reference* to the $# variable
# or
_last=$BASH_ARGV  # official built-in (but takes more typing :)

그게 다야.

$ cat lastarg
#!/bin/bash
# echo the last arg given:
_last=${!#}
echo $_last
_last=$BASH_ARGV
echo $_last
for x; do
   echo $x
done

출력은 다음과 같습니다

$ lastarg 1 2 3 4 "5 6 7"
5 6 7
5 6 7
1
2
3
4
5 6 7


답변

길이와 결합 된 인덱싱을 사용하십시오.

echo ${@:${#@}} 

이것은 bash 전용입니다.


답변

다음은 당신을 위해 일할 것입니다. @는 인수 배열입니다. : 의미합니다. $ #는 인수 배열의 길이입니다. 결과는 마지막 요소입니다.

${@:$#} 

예:

function afunction{
    echo ${@:$#} 
}
afunction -d -o local 50
#Outputs 50

이것은 bash 전용입니다.


답변

마지막 인수를 이전의 모든 인수와 분리하려고 할 때 이것을 찾았습니다. 일부 답변은 마지막 인수를 얻지 만 다른 모든 인수가 필요한 경우 큰 도움이되지 않습니다. 이것은 훨씬 잘 작동합니다.

heads=${@:1:$#-1}
tail=${@:$#}

이것은 bash 전용입니다.