Case 문을 사용하여 함수에 인수 전달

Case 문을 사용하여 함수에 인수 전달

내 inithome.sh에 다음 코드가 있습니다.

HOMEDIR="/home/$USER/"

descomu () {
case "$*" in
-ut|--user-tar-dir)
     TARHOMEDIR= "$2"
     if test "$2" = ""
      then
              echo "The direction can't be empty"
              exit
      fi
-p|--permissions
      descomu -p
      ;;
esac

if test "$TARHOMEDIR" = ""
then
      echo "Direction of tar-home not specified. Use -ut or --user-tar-di  r for that."
      exit
else
     if test "$*" = "-p" || test "$*" = "--permissions"
     then
            eval "$( tar -xvfp "$TARHOMEDIR" --directory= "$HOMEDIR" )"
            if "$?" -eq 0
            then
                    echo "Sucess"
                    return 0
            else
                    echo "Fail"
                    return 1
            fi
    else
            eval "$( tar -xvf "$TARHOMEDIR" -C "$HOMEDIR" )"
            if test "$?" -eq 0
            then
                    echo "Sucess"
                    exit
            else
                    echo "Fail"
                    exit
            fi
      fi
fi
}

while test $# -gt 0
do
case $1 in
-ru|--recover-user)
      descomu "$@"
      ;;
*)

      ;;
esac
done

-ut매개변수 값을 이름이 지정된 변수에 전달 하고 싶지만 $TARHOMEDIR이렇게 하면 변수가 할당되지 않았다는 ./inithome.sh -ru -ut PATH플래그가 set -u표시됩니다 . $TARHOMEDIR나는 성공 하지 "$*", "$@", $*못했습니다 ."$*"case $foo in

나는 그것을 작동시킬 수 있습니다 :

descomu () {
case "$2" in
-ut|--user-tar-dir)
     TARHOMEDIR= "$3"
     if test "$3" = ""
     then
              echo "The direction can't be empty"
              exit
     fi
-p|--permissions
     descomu -p
     ;;
esac

하지만 통과해야만 효과가 있어요하나매개변수가 올바른 위치에 배치되어 있지만 매개변수가 여러 개 있어서 임의의 위치에 배치하고 싶습니다. IFS변수 에 문제가 있는 걸까요? 그럼 그를 어떻게 선언해야 할까요?

답변1

첫 번째 스크립트에는 문제가 많습니다.

이것은 eval잘못된 것입니다. tar 명령의 출력을 원하지 않습니다!

$@모든 함수 에는 호출하는 인수로 구성된 고유한 가 있습니다 . 이는 또한 모든 함수에 고유한 $1, $2... 이 있음을 의미합니다.

~ 해야 하다=과제에서 기호 주위에는 공백이 없습니다 TARHOMEDIR="$3". 이는 의미를 완전히 변경합니다.

$*일반적 으로 모든 매개변수(실제 사례)를 특정 사례와 비교하는 대신 매개변수를 반복하여 한 번에 하나씩 처리합니다 .

"$@"일반적으로 를 대신 사용하고 싶습니다 "$*". 분명히 예외가 있지만 매우 특이한 경우입니다.

관련 정보