변수의 일부를 무작위 입력으로 바꾸는 방법은 무엇입니까?

변수의 일부를 무작위 입력으로 바꾸는 방법은 무엇입니까?

저는 작은 쉘 스크립트를 작성하고 있는데 이제 얻은 입력을 기반으로 디렉토리를 생성해야 하는 상황에 봉착했습니다. 여기 장면이 있습니다

나는 2 개의 디렉토리를 가지고 있습니다

DIR_PRE=/path/to/dir/dir_PRE

DIR_POST=/path/to/dir/dir_POST

이제 함수에 전송된 입력을 기반으로 두 디렉터리 중 하나를 만드는 함수를 사용하고 싶습니다.

  • 내가 보내면 create_dir PRE첫 번째 디렉토리를 생성해야하고
  • 내가 보내면 create_dir POST두 번째 디렉터리가 생성되어야 합니다.

create_dir아래에 정의된 함수입니다.

create_dir ()
{
  STAGE=$1
  mkdir -p $DIR_${STAGE}  # <-- how to get this right?
}

답변1

대문자 변수 이름을 사용하지 않도록 노력해야 합니다. 이는 내보내려는 변수가 아니므로 혼동해서는 안 됩니다. 다음은 원하는 것을 얻기 위해 실행할 수 있는 간단한 코드 조각입니다.

#!/usr/bin/env bash

dir_pre="$HOME"/dir_PRE
dir_post="$HOME"/dir_POST

die(){ echo >&2 "$@"; exit 1; }

create_dir()
{
    local dir="$1"
    case $dir in
        PRE)    mkdir -p "$dir_pre";;
        POST)   mkdir -p "$dir_post";;
        *) die "option not known";;
    esac
}
create_dir "$@"

답변2

비교적 간단한 방법은 if생성자를 사용하는 것입니다.

create_dir()
{
  if [[ $1 == "PRE" ]]
  then
      mkdir -p "$DIR_PRE"
  elif [[ $1 == "POST" ]]
  then
      mkdir -p "$DIR_POST"
  else
      echo "Illegal argument $1!"
  fi
}

관련 정보