在以下腳本中:
#!/usr/bin/env bash
func_usage ()
{
cat <<EOF \
USAGE: ${0} \
EOF
}
## Defining_Version
version=1.0
## Defining_Input
options=$(getopt -o "t:" -l "h,help,v,version,taxonomy:" -a -- "$@")
eval set -- "$options"
while true;do
case $1 in
-h|--h|-help|--help)
func_usage
exit 0
;;
-v|--v|-version|--version)
echo $version
;;
-t|--t|-taxonomy|--taxonomy)
echo "Option t = $2 ";
Taxonomy_ID=$2
echo $Taxonomy_ID
shift
;;
--)
shift
break;;
esac
shift
done
## Defining Taxonomy Default Value (in case is not provided)
TaxonomyID=${Taxonomy_ID:=9606};
echo $TaxonomyID
exit 0
命令:
./script.sh -v
./script.sh --v
./script.sh -version
./script.sh --version
按預期作業。但我不明白的是為什么命令:
./script.sh -ver
./script.sh --ver
作業。還觀察到命令的等效意外行為:
./script.sh -tax 22
./script.sh --tax 22
如果能得到解釋和/或糾正這種意外行為的方法,我將不勝感激。
uj5u.com熱心網友回復:
請注意,這getopt是一個與 Bash 無關的外部實用程式。
我不明白的是為什么命令:.. 作業。
因為getopt是為了支持它而設計的,所以沒有其他解釋。來自man getopt:
[...] 長選項可以縮寫,只要縮寫沒有歧義。
長選項的明確縮寫將轉換為長選項。
uj5u.com熱心網友回復:
根據我收到的評論,特別是來自@CharlesDuffy 的評論,我已將代碼修改為我認為更強大和兼容的版本。重要的是,下面的代碼解決了原始代碼的缺陷
#!/usr/bin/env bash
func_usage ()
{
cat <<EOF
USAGE: ${0}
EOF
## Defining_Version
version=1.0
## Defining_Input
while true;do
case $1 in
-h|--h|-help|--help|-\?|--\?)
func_usage
exit 0
;;
-v|--v|-version|--version)
echo $version
;;
-t|--t|-taxonomy|--taxonomy)
echo "Option t = $2 ";
Taxonomy_ID=$2
echo $Taxonomy_ID
shift
;;
--)
shift
break;;
-?*)
printf 'WARN: Unknown option (ignored): %s\n' "$1" >&2
;;
*)
break
esac
shift
done
TaxonomyID=${Taxonomy_ID:=9606};
echo $TaxonomyID
exit 0
上面的代碼按預期運行,因為命令:
./script -tax 22
給出警告:
WARN: Unknown option (ignored): -tax
9606
正如預期的那樣
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/373056.html
上一篇:將變數的全部內容傳遞給函式
