私は小さなシェルスクリプトを書いていますが、これで得られた入力に基づいてディレクトリを作成する必要がある状況に固執しました。ここにシーンがあります
私は2つのディレクトリを持っています
DIR_PRE=/path/to/dir/dir_PRE
DIR_POST=/path/to/dir/dir_POST
次に、関数に送信された入力に基づいて2つのディレクトリのうちの1つを作成する関数を使用したいと思います。
- 私が送信したら、
create_dir PRE
最初のディレクトリを作成する必要があります - 私が送信したら、
create_dir POST
2番目のディレクトリを作成する必要があります。
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
}