在bash中循环读取文件名数组。

问题描述 投票:1回答:1

我有一个包含文件路径的数组,每个文件都有一行。每一个文件都有一行。我想循环浏览这个数组,并为每一个文件读取其中的一行并将其存储在一个变量中。我尝试了这样的方法

f1=$1
f2=$2
filenames[0]=${f1}
filenames[1]=${f2}
for filename in "${filenames[@]}"
do
  # get the filename
  set fl = `basename $filename`
  echo ${fl}
  # read its contents (one line)
  set filecontent = `cat ${fl}`
  echo ${filecontent}
done

两个回声都显示空白。如果我做

echo `basename $filename`

它确实显示了文件名。上面的循环有什么问题?

bash tcsh
1个回答
1
投票

基本的问题是,你似乎把bash和tcsh语法混在一起了--只是碰巧你使用了tcsh命令,而这些命令在bash中恰好没有语法错误,但却没有达到你想要的效果。

这个。

set fl = `basename $filename`

就是你应该如何设置 $fl 的基名。$filename 在tcsh中。然而,在bash中, set 命令是完全不同的。反正你在这里也不需要用到,所以我就不细说了,但你可以阅读一下它们的内容。此处.

在bash中,设置一个变量的方法就是

var=value  # NO spaces around the "="

另外,bash与tcsh不同,它有一个叫做 $(command) 语法来捕获命令的输出,除了旧的 `command`.

所以你的命令

set fl = `basename $filename`

应是

fl="$("basename $filename")"

加双引号 $filename 参考文献和 $(...) 命令替换确保shell可以处理文件名和命令输出中的奇数字符。

© www.soinside.com 2019 - 2024. All rights reserved.