【发布时间】:2016-11-07 02:29:40
【问题描述】:
我正在尝试在 bash 中遍历一个包含一些 .txt 文件的目录。我对 bash 的经验很少,但我需要使用它,因为我可以在获得每个文件的内容后运行其他命令。我 想要这样做:
for file in <directory>; do
read its contents
do something with the contents
done
我发现如果我硬编码文件名,你可以用一个文件来读取文件:
contents = $(<filename.txt)
并遍历目录中的所有文件,我正在这样做:
for file in dir; do
done
我希望能够遍历所有文件并使用循环中的文件变量读取它们。 但在循环内部,这些都不起作用(我也尝试过这些组合):
for file in dir; do
contents = $(<$file)
done
for file in dir; do
contents = $(<"$file")
done
for file in dir; do
contents = $(<${file##*/})
done
for file in dir; do
contents = $(<"${file##*/}")
done
for file in dir; do
contents = $(<$(basename "$file"))
done
for file in dir; do
filename = $(basename "$file")
contents = $(<$filename)
done
for file in dir; do
filename = "${file##*/}"
contents = $(<$filename)
done
提前感谢您的帮助。
【问题讨论】:
-
for file in dir/*.txt; do echo "Showing $file ......"; contents=$(<"$file"); echo "$contents"; done -
我得到命令在 contents=$( 上找不到
-
我把它放在顶部 #!/bin/bash 否则我将如何确保它的 bash 而不是 sh。文件名保存为 .sh
-
文件在那里,我事先 cd 到脚本中的那个目录以确保
-
@CostasVrahimis:您的 shell 变量分配在
=周围都有空格,这是不受支持的。像contents = ...(注意=周围的空格)之类的东西会让shell 认为你正在执行一个名为contents的命令,但它会失败。