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

보시다시피 디렉토리 중 하나를 만들었습니다. 그런 다음 다른 디렉토리를 사용하여 동일한 코드를 다시 반복해야 합니다(다음번에는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?)를 제외한 거의 모든 쉘은 이를 동일하게 취급합니다.)

바라보다:

관련 정보