2013-03-16 56 views
1

我们如何读取所有文本文件并输入参数,以便我们可以对其进行处理?阅读所有文本文件并输入参数

1.txt -->100 
2.txt -->200 
.. 
9.txt -->900 

$ ./read.sh 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt 

read.sh:

$file1=$1 
$file2=$2 
... 
$file9=$9 

但它插入 “的1.txt”,而不是100,我们怎样才能得到文件的文件代替名称的价值?

+2

在我看来,你不会采用这种正确的方式,除非文件的数量总是固定的。即使如此,一个循环(与数组?)将比'编号'变量更好匹配 – sehe 2013-03-16 20:41:54

+0

@sehe:是的,你是对的。我读得太快了。读取脚本中的循环以文件路径作为参数是一种方式。 – Heisenbug 2013-03-16 20:47:23

回答

1

我认为您在寻找xargs。在是你的.txt文件的目录试试这个命令:

cat * | xargs ./read.sh 

或者:

./read.sh `cat *` 
2

不知道如果我正确地理解你的问题。如果你想把文件的内容,您作为参数传递给脚本到变量$file1$file2,等你应该read.sh这个样子的:

file1=$(<"$1") 
file2=$(<"$2") 
... 
file9=$(<"$9") 

注意,给一个变量赋值时您必须使用变量名称而不带前导$

的更通用的解决方案(您使用bash 4提供的)可能看起来像这样:

declare -A files 

while [ -n "$1" ]; do 
    files[$1]=$(<"$1") 
    shift 
done 

declare -A创建关联数组(或字典),可存储名称→值映射关系,例如文件名→内容。

+2

现在,用'$(<“$ 1”)替换'$(cat“$ 1”)''以避免每次启动一个单独的进程:) – sehe 2013-03-16 21:13:20

+0

@sehe整洁。我今天学了些新东西。谢谢。 – 2013-03-16 21:43:06