我编写了一个脚本,可以获取可变数量的参数:
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
。我得检查一下我正在使用的机器上是否可用。 - H_squared$#
开始倒计时,在对每个参数运行[ -f "$arg" ]
前,将其分割成“-”分隔的参数,然后不是在$@
上运行cut
过滤器,而是在"$input"
上运行它——$input 是您从所有“非文件”参数构造的新数组变量。如果这个问题以后没有解决,我会发布一个示例。 - hmedia1getopts
对于需要多个参数的选项并不是很有效。 - chepner