#!/usr/bin/bash
kill9="9"
kill15="15"
if [ $1 == $kill9 ]; then
set -- "$1" "$kill9"
else
set -- "$1" "$kill15"
fi
echo $1
-9를 입력하면 $1이 9가 되고, -15를 입력하면 $1이 15가 됩니다. 위의 스크립트는 잘못되었습니다.
어떻게 해야 하나요?
답변1
#!/usr/bin/bash
kill9="9"
kill15="15"
if [ "$1" = "-$kill9" ]; then
set -- "$kill9"
else
set -- "$kill15"
fi
printf '%s\n' "$1"
답변2
set을 사용하여 솔루션을 찾았습니다.
#!/usr/bin/bash
kill9="9"
kill15="15"
if [ $1 -eq $kill9 ]
then
set "9"
else
set "15"
fi
echo $1
답변3
다른 위치 인수는 변경하지 않고 첫 번째 위치 인수를 변경합니다.
POSIX에서 sh
(따라서 bash
모든 최신 Bourne 유사 쉘에도 적용됨):
case $1 in
(-9 || -15) shift; set -- "${1#-}" "$@"
esac
ksh 또는 최근에는 bash (또는 zsh -o kshglob
)
if [[ $1 = -@(9|15) ]]; then
shift; set -- "${1#-}" "$@"
fi
zsh에서는 간단히 할당할 수 있습니다 $1
(또는 $argv[1]
)
[[ $1 = -(9|15) ]] && 1=${1#-}
(또는 argv[1]=${argv[1]#-}
또는 (( argv[1] = - $1 ))
).
csh
/ 에서 tcsh
( zsh
위치 매개변수도 배열에 매핑된다는 사실을 복제 $argv
):
if ($1:q == -9 || $1:q == -15) @ argv[1] = - $1
존재하다 fish
:
if contains -- "$argv[1]" -9 -15; set argv[1] (math - $argv[1]); end
거기$argv
예위치 매개변수 배열(아니요 $1
, $2
...거기).
에서 ( 약어 rc
) :$1
$*(1)
if (~ $1 -9) {shift; * = (9 $*)} else if (~ $1 -15) {shift; * = (15 $*)}
또는:
if (~ $1 -9 -15) {shift; * = (`{expr x$1 : 'x-\(.*\)'} $*)}
답변4
(귀하의 질문에 대한 답변은 아니지만 기본 요구 사항에 도움이 될 수 있습니다.)
또 다른 접근 방식은 다음을 사용할 때 불필요한 선행 대시를 제거하는 것입니다.
echo "arg 1: ${1#-}"