在数组中保存命令行参数的Shell脚本



我有一个shell脚本,它被调用如下

ex file1 file2 file3 word1 word2。。。。wordn

我在一个数组中有file1 file2 file3,我尝试了以下

for i in $(seq 1 3)
do
FILES[$i]=$0;
` expr shift `;
echo "FILES["$i"]="$FILES[$i];
done;

所以我希望在一个序列中,将参数移动3倍,并像这样保存。。。但它给了我一个错误:

./ex: 11: ./ex: FILES[1]=./ex: not found
FILES[1]=[1]
./ex: 11: ./ex: FILES[2]=./ex: not found
FILES[2]=[2]
./ex: 11: ./ex: FILES[3]=./ex: not found
FILES[3]=[3]

我也试过这样:

for i in $(seq 1 3)
do
FILES[$i]=$i;  // this actually means 1,2 or 3;I would like to mean $1,...
` expr shift `;
echo "FILES["$i"]="$FILES[$i];
done;

为了让它变成$1而不是1,我尝试了类似$($I(或${$I}的东西,但说这是糟糕的替代。谢谢

#!/bin/bash
FILES=("${@:1:3}")
shift 3

双引号允许文件名包含空格(如果用引号括起来(,并且仍然占用一个数组项。如果不希望出现这种情况,请省略引号。第一项和项数的参数可以是变量,不需要文字值。

这样做:

for i in {1..3}; do
    FILES[$i]=$1
    shift
done

第一个参数是$1,而不是$0,这是脚本的名称。而且你不会把shift放在backticks中;它将输出替换回命令行,这就是为什么当它试图将其作为命令执行时会出现错误的原因。

最新更新