Bash는 $1 값을 할당합니다.

Bash는 $1 값을 할당합니다.
#!/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#-}"

관련 정보