将选项从数组传递到 UNIX 中的内置 ls 命令

将选项从数组传递到 UNIX 中的内置 ls 命令

我正在编写一个 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

该答案不是试图解决您提出的问题,而是提供了一个尝试解决根本问题的解决方案。对于这个例子,我假设参数as是布尔值(开关),但参数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手册页。

相关内容