簡體   English   中英

bash getopts無法識別參數

[英]bash getopts not able to recognize arguments

我們有一個getopts腳本來檢索參數,如下所示

#!/bin/bash
while getopts ":d:l:f:o:" OPT;
do
    echo 'In Test Script - Got Options '$OPT ' with' $OPTIND ' and ' $OPTARG
    case $OPT in
        d)
            echo $OPTARG;;
        f)
            echo $OPTARG;;
        l)
            echo $OPTARG;;
        ?)
            echo $OPTARG;;
    esac
done

我們收到一個參數,該參數在另一個腳本中進行了解析,然后傳遞給getopts腳本,它對於單個輸入有效,例如12345,-d somedesc -l somelabel

#!/bin/bash
INFO="12345,-d somedesc -l somelabel"
ID=`echo "$INFO" | awk -F "," "{ print $"1" }"`
OPTIONS=`echo "$INFO" | awk -F "," "{ print $"2" }"`
sh test.sh $OPTIONS

但是,我們收到多個條目,例如12345,-d somedesc -l somelabel:6789, -d anotherdesc -l anotherlabel並且正在使用loopawk進一步拆分參數,在這種情況下,即使選項正確,也不會觸發getopts通過。

#!/bin/bash
INFO="12345,-d somedesc -l somelabel:6789, -d anotherdesc -l anotherlabel"
IFS=":"
set $INFO
echo 'Parsing INFO '$INFO
for item
do
    echo 'Item is '$item
    #parsing each item to separate id and options
    ID=`echo "$item" | awk -F "," "{ print $"1" }"`
    echo 'ID is '$ID
    OPTIONS=`echo "$item" | awk -F "," "{ print $"2" }"`
    echo 'Invoking Test Script with '$OPTIONS
    sh test.sh $OPTIONS
done

任何原因getopts無法識別OPTIONS嗎?

問題是,你在你的腳本的頂部改變IFS的價值冒號:然后將參數傳遞給你的腳本test.sh而IFS仍設置為: 實際上被稱為:

第一次:

sh test.sh "-d somedesc -l somelabel"

和第二次:

sh test.sh " -d anotherdesc -l anotherlabel"

因此,使參數列表成為單個參數和getops失敗。

您需要做的是保存原始IFS,然后再將其設置為冒號,並在set命令后將其還原,如下所示:

#!/bin/bash
INFO="12345,-d somedesc -l somelabel:6789, -d anotherdesc -l anotherlabel"
# save IFS value
OLDIFS=$IFS
IFS=":"
set $INFO
# restore saved IFS value
IFS=$OLDIFS

echo 'Parsing INFO '$INFO
for item
do
    echo 'Item is '$item
    #parsing each item to separate id and options
    ID=`echo "$item" | awk -F "," "{ print $"1" }"`
    echo 'ID is '$ID
    OPTIONS=`echo "$item" | awk -F "," "{ print $"2" }"`
    echo 'Invoking Test Script with '$OPTIONS
    sh test.sh $OPTIONS
done

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM