我有一个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中;它将输出替换回命令行,这就是为什么当它试图将其作为命令执行时会出现错误的原因。