【发布时间】:2016-10-19 12:56:26
【问题描述】:
我编写了一个脚本,它可以获取可变数量的参数:
test.sh -i <input1> <input2> ... -o <output1> <output2> ...
我正在解析参数如下:
while [ $# -gt 1 ]; do
TMP=$(echo "$@" | cut -d '-' -f 2) #i <input1> <input2>
TMP1=$(echo "$TMP" | cut -d ' ' -f 1) #i
CNT=$(echo "$TMP" | wc -w) #3
set -x
case "$TMP1" in
i)
INPUTS=$(echo "$TMP" | cut -c 3-)
shift "$CNT"
;;
o)
OUTPUTS=$(echo "$TMP" | cut -c 3-)
shift "$CNT"
;;
esac
done
这每次都有效,但名称中恰好有“-”的文件除外。
例子:
./test.sh -i file1.txt file-2.txt -o out1.txt out-2.txt
我是否可以强制cut 忽略文件名中出现的分隔符?
【问题讨论】:
-
我不知道
getopts。我将不得不检查它是否在我正在使用的机器上可用 -
为什么不从
$#倒计时并在每个 arg 上运行[ -f "$arg" ],然后再切割“-”分隔的参数,而不是在$@上运行cut过滤器,您可以在"$input"上运行它 - $input 是您从所有“非文件”参数构造的新数组变量。如果以后没有解决这个问题,我会发布一个例子 -
getopts不适用于带有多个参数的选项。
标签: bash parsing unix delimiter