我正在嘗試使用以下用法制作腳本:
bash script.sh [-a] databases ...
然后,該腳本使用來自“資料庫”的引數填充陣列 $databases
databases=("$@")
現在我正在嘗試實作-aif set 應該宣告的選項att=1:
while getopts "a" o; do
case "${o}" in
a)
att=1
;;
esac
done
現在我面臨的問題是在執行腳本時-a也會被放入陣列中。
我不能read用于陣列,因為在腳本執行后我沒有輸入附加引數的選項,因為腳本將使用 RMM 自動執行,并且只允許您在創建作業時輸入附加引數。
uj5u.com熱心網友回復:
在填充變數之前,您必須shift在塊中使用:case
while getopts "a" o; do
case $o in
a)
att=1
shift
;;
esac
done
databases=("$@")
declare -p databases att
然后像這樣運行它:
bash script.sh -a DB1 DB2 DB3
輸出:
declare -a databases=([0]="DB1" [1]="DB2" [2]="DB3")
declare -- att="1"
uj5u.com熱心網友回復:
使用 getopts 管理選項的標準方法是執行全域shift:
#!/usr/bin/env bash
while getopts "a" o; do
case "${o}" in
a) att=1 ;;
esac
done
shift $((OPTIND - 1))
databases=("$@")
declare -p databases att
# output
# ./test.sh -a DB1 DB2 DB3
# declare -a databases=([0]="DB1" [1]="DB2" [2]="DB3")
# declare -- att="1"
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/432628.html
上一篇:是否可以構建一個可重復使用的可破壞的while回圈?
下一篇:`at`僅在我添加新作業時運行
