2016-04-28 52 views
0

我有一些文件,如:如何使文件从FILE {1-3}变量值for循环?

FILE1="apple.txt" 
FILE2="grapes.txt" 
FILE3="strawberry.txt" 

我怎么能在bash使这些文件?

我尝试这样做,但我得到了一个错误......

for f in {1..3} 
do 
    echo hello > $(FILE$f) 
done 

错误:

./make_files.sh: line 48: FILE1: command not found 
./make_files.sh: line 48: $(FILE$f): ambiguous redirect 

我需要它们含有你好3 txts,苹果,葡萄和草莓。

回答

2

我猜你想要做的是,这三个名字创建的文件: apple.txt,grapes.txt和strawberry.txt

,所以你应该做的:

for f in {1..3} 
do 
    TMP="FILE$f" 
    echo hello > "${!TMP}" 
done 
1

IIUC,你想这样:

for f in {1..3} 
do 
    echo hello > FILE"$f" 
done 

编辑:

基于另一个回答您的评论我觉得你真的想这样:

for f in {1..3} 
do 
    echo hello > $(< FILE"$f") 
done 

例子:

$ ls 
FILE1 FILE2 FILE3 
$ cat FILE1 FILE2 FILE3 
apple.txt 
grapes.txt 
strawberry.txt 
$ for f in {1..3} 
> do 
>  echo hello > $(< FILE"$f") 
> done 
$ cat apple.txt grapes.txt strawberry.txt 
hello 
hello 
hello 
1

还是做这一切在一次:

for f in FILE{1..3}; do 
    echo hello >"${!f}" 
done 

主要错误在你的代码是$( ... ),这是命令替换:它试图运行名称FILE1FILE2等。 作为命令,以便使用这些命令的输出作为要写入的文件的名称。

你想要做的是使用那些作为参数名称。要间接检索其名称存储在另一个参数中的参数值,请使用!,如${!f}中所示。

但大多数的时候,你在做这样的事情,你最好使用一个数组:

FILES=("apple.txt" "grapes.txt" "strawberry.txt") 
for f in "${FILES[@]}"; do 
    echo hello >"$f" 
done 
+0

它写出你好,到FILE1,FILE2,FILE3。但是我需要向apple.txt写出你好,等等。 – tmsblgh