我正在编写一个 shell 脚本,它需要几个像这样的参数-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
手册页。