위치 지정 인수 또는 명명 된 인수를 사용하려고 시도 할 수있는 Bash 함수를 작성 중입니다. 위치 지정 인수는 일반적으로 "${1}"
, "${2}"
방법 및 명명 된 인수는 getopts
을 사용하여 액세스합니다. 아래에 표시된 예제 코드와 예제 사용법을 통해 내가하려는 것을 설명합니다. 문제는 변수 ${*}
에서 수행하는 확인은 추가 인수의 문자 내용을 크게 제한하는 문자 -
에 대한 grep에 불과하다는 것입니다. Bash에서 명명 된 인수를 확인하는 데 더 지능적이고 강력한 방법은 무엇입니까?Bash 함수는 위치 또는 이름 지정된 인수와 함께 사용되고 있는지 여부를 어떻게 감지 할 수 있습니까?
예제 코드 :
function1(){
# flags
argumentsFlag1=""
# n: named arguments
# p: positional arguments
verboseFlag1="0"
# v: verbose
silentFlag1="0"
# 0: standard output
# 1: no standard output
# options and arguments
# Determine if positional or named arguments are used.
# If the arguments contain "-", then named arguments are assumed,
# otherwise positional arguments are assumed.
if [ "$(echo "${*}" | grep "-")" ]; then
argumentsFlag1="n"
else
argumentsFlag1="p"
fi
# handle named arguments
if [ "${argumentsFlag1}" == "n" ]; then
OPTIND=1; while getopts "i:sv" options; do
case "${options}" in
i)
input1="${OPTARG}"
;;
v)
verboseFlag1=1
;;
s)
silentFlag1=0
;;
\?)
echo "invalid option -"${OPTARG}""
return
;;
:)
echo "option -"${OPTARG}" requires an argument"
return
;;
esac
done
# handle positional arguments
elif [ "${argumentsFlag1}" == "p" ]; then
input1="${1}"
fi
# default values
if [ -z "${verboseFlag1}" ]; then
verboseFlag1=0
fi
# ------------------------------------------------------------------------------
if [ "${argumentsFlag1}" == "n" ]; then
echo "named arguments assumed"
elif [ "${argumentsFlag1}" == "p" ]; then
echo "positional arguments assumed"
fi
echo "input: "${input1}""
}
사용 예 :
$ function1 zappo
positional arguments assumed
input: zappo
$ function1 -i zappo
named arguments assumed
input: zappo
편집 : 나는 동시에에 위치 및 명명 된 인수를 사용하려고하고 있지 않다 있습니다. 함수가 인수를 위치 또는 이름 인수의 혼합으로 해석 할 때만에 의해 인수를 해석하고있는 상태로 만들려고합니다. getopts
이 사용되지 않는 경우가 있습니다. 다음 아이디어를 상상해보십시오 ...
하나의 데이터 유형에서 다른 유형으로 사용되는 함수가 있습니다.
이 모드는 다음과 같은 방식으로 사용될 수있다
빠른 모드 :이 함수는 두 가지 모드가 자율적 만들어진 내부 가정과 측정을 사용하여 다른 하나의 파일로 변환
function fileName1 fileName2
.
고급 모드는
이 모드는 다음과 같은 방식으로 사용할 수 있습니다
function -i fileName1 -o fileName2 -m -r 100 -v
가이 모드에서 사용되는 위치 인수 될 수 있지만, 그들은 getopts
위치 옵션 다음에 위치해야 및 인수.
여기에서 키 : [shift] (http://www.gnu.org/software/bash/manual/bashref.html#index-shift) -'shift $ ((OPTIND-1)) –
I [이] (http://stackoverflow.com/a/13400237/1556092)와 같은 것을 의미한다고 생각하십니까? 그것은 좋은 생각이지만, 나는 동시에 명명 된 인자와 위치적인 인자를 사용하려하지 않는다. 함수의 상태를 전환하여 인수가 전적으로 위치 또는 완전히/부분적으로 해석되도록합니다. 한 가지에서 다른 것으로 변환하는 데 사용되는 함수를 상상해보십시오. 빠른 모드는 위치 인수 (''''function fileName1 fileName2''')를 사용하는 반면, 고급 모드는 해상도, 자세한 정보 등과 같은 다른 명세를 위해 명명 된 인수를 사용합니다. – d3pd
그렇다면이 솔루션은 왜 작동하지 않을까요? 그것은 하나 또는 둘 모두를 처리합니다. 필요한 것보다 더 복잡하게 만드는 것처럼 들리는군요. – Donovan