![UNIXでは、配列のオプションを組み込みlsコマンドに渡す[閉じる]](https://linux33.com/image/131963/UNIX%E3%81%A7%E3%81%AF%E3%80%81%E9%85%8D%E5%88%97%E3%81%AE%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E7%B5%84%E3%81%BF%E8%BE%BC%E3%81%BFls%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%AB%E6%B8%A1%E3%81%99%5B%E9%96%89%E3%81%98%E3%82%8B%5D.png)
私はこのようないくつかのパラメータを-l -s -a -f thing ming
取ります-
。
これは私のコードです。
arrayOfArgs=()
for arg in "$@":
do
case arg in
-*) arrayofArgs+=($args) ;;
esac
done
今arrayOfArgs
これを印刷します。
-l, -s, -a, -f.
私の興味は、結果がカンマで区切られていることです。
同等ですls {"$arrayOfArgs"}
か? ls -l -s -a -f
答え1
この回答は、あなたが要求した問題を解決しようとするのではなく、根本的な問題を解決しようとするソリューションを提供します。この例では、引数がブールa
(スイッチ)であると仮定していますs
が、引数にはl
引数が必要です。
unset -v flagA flagS valueL
while getopts "al:s" OPT
do
case "$OPT" in
a) echo "Got a"; flagA=true ;;
s) echo "Got s"; flagS=true ;;
l) printf 'Got l with value "%s"\n' "$OPTARG"; valueL="$OPTARG" ;;
esac
done
shift "$((OPTIND - 1))"
printf '%s\n' "flagA=${flagA-unset}, flagS=${flagS-unset}, valueL=${valueL-unset}"
if [ "$#" -gt 0 ]; then
printf 'Other arguments:\n'
printf ' - "%s"\n' "$@"
fi
bash
詳細については、マニュアルページを参照してください。