Я пишу сценарий оболочки и хочу передать несколько параметров в аргументе. Возможно ли это сделать, как с помощью getopts?
Пример требования:
./shell.sh -d db1 db2
должен передавать значения db1
и db2
как ценности -d
вариант.
Вы можете использовать один вариант несколько раз и собирать результаты в массиве:
./shell.sh -d db1 -d db2
Код:
while getopts "d:" opt
do
case ${opt} in
d) dbs+=("$OPTARG");;
esac
done
Нет. Но вы передаете единственный аргумент, соединенный, например, двоеточием; или цитируется
./shell.sh -d db1:db2
./shell.sh -d "db1 db2"
В первом случае:
while getopts d: opt; do
case $opt in
d) IFS=: read -a dbs <<< "$OPTARG" ;;
esac
done
Во втором случае (цитируется)
d) set -f # turn off filename expansion
dbs=($OPTARG) # variable is unquoted
set +f;; # turn it back on