如何使用随机输入替换变量的一部分?

如何使用随机输入替换变量的一部分?

我正在编写一个小型 shell 脚本,但现在陷入了必须根据获得的输入创建目录的境地。下面是场景

我有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
}

相关内容