Bashスクリプトに独自のパラメータを持つ関数

Bashスクリプトに独自のパラメータを持つ関数

Linuxでディレクトリが存在しない場合は、いくつかのディレクトリを生成するスクリプトを作成したいと思います。これらのディレクトリはスクリプト自体内で宣言されます(コマンドラインでは渡されません)。

#!/bin/bash

varBaseDir="/home/user"

# Directories to create
varAppDir="${varBaseDir}/app"
varAppDataDir="${varBaseDir}/appData"

if [[ -d ${varAppDir} ]]
        then
                echo "app dir exist"
        else
                echo "app dir does not exist! creating '${dir}' ..."
                mkdir -p ${dir}
                if test "$?" -eq "0"
                        then
                                        echo "succeeded."
                        else
                                echo "failed to create directory"
                fi
fi

ご覧のとおり、ディレクトリの1つを作成しました。その後、別のディレクトリを使用して同じコードをもう一度繰り返す必要があります(次回はvarAppdata ディレクトリ生成されます)。

関数を宣言する方法を見つけようとしています。

my_function($dir) {
        echo $dir
}

my_funciotn("HELLO")

しかし、エラーが発生します。

./test.sh: line 27: syntax error near unexpected token `$dir'
./test.sh: line 27: `my_function($dir) {'

もしそうなら、これを正しく行う方法は何ですか?

答え1

POSIXシェルまたはBashの関数には名前付きパラメータはありません。代わりに、パラメータは場所パラメータなどに表示されます$1$2

必要に応じて、名前付きローカル変数に手動でコピーする必要があります。だから:

foo() {
    local this="$1"
    local that="$2"
    printf "foo: that is '%s'\n" "$that"
}
foo one two

(ローカル変数は標準で指定されていませんが、ksh(ksh93?)を除くほとんどすべてのシェルはこれを同じように扱います。)

望むより:

関連情報