bash - 循环遍历 bash 中的文件名数组并读取它们
问题描述
我有一个包含文件路径的数组。这些文件中的每一个都有一行。我想遍历数组,并为每个文件读取其中的行并将其存储在变量中。我试过这个
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 语法 - 碰巧您使用的 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 可以处理文件名和/或命令输出中的奇数字符。
推荐阅读
- objective-c - 函数“UI_USER_INTERFACE_IDIOM”的隐式声明在 C99 中无效
- python - TypeError: test() 缺少 1 个必需的位置参数
- javascript - 等待已经实现的 Promise 的性能开销是多少?
- android - 未找到默认活动,但在清单中指定了默认活动。将 Android Studio 更新到 3.21 后发生的问题
- typescript - 在 Typescript 中设置 NODE_PATH 是不可能的吗?
- php - 如何将数据库中的选定值设置为下拉列表
- c - 在 C 中初始化 UNION 的浮点值
- mysql - 创建触发器更新 SQL 表
- c++ - 为什么 x86-64 使用 IA-64 C++ ABI?
- javascript - 自定义“添加到主屏幕”横幅。在安培