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

时间:2014-06-16 10:31:09

标签: bash shell unix

我有一个像这样调用的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}的东西但是说是不好的替代品。 谢谢!

2 个答案:

答案 0 :(得分:2)

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

双引号允许文件名包含空格(如果它们用引号括起来),并且仍然占用一个单独的数组项。如果这是不受欢迎的,请保留引号。第一项的参数和项数可以是变量,不需要文字值。

答案 1 :(得分:1)

这样做:

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

第一个参数是$1,而不是$0,这是脚本的名称。并且你没有把shift放在反引号中;将输出替换回命令行,这就是为什么当它尝试将其作为命令执行时会出错。