【问题标题】:Reading txt file in bash line by line, without knowing its name [duplicate]在不知道其名称的情况下逐行读取bash中的txt文件[重复]
【发布时间】:2016-03-03 06:11:10
【问题描述】:

我需要读取一个我做的脚本给我的文件,文件可以是任意名字,输入如下

./Naloga1.sh tocke

这是我的代码:

while read line
do
  echo $line
done < 

问题是,首先,如果我将脚本名称放在完成后,它将读取我文件中的所有行 - 最后一行。 其次,我如何访问文件名然后输出它? 如果我回显 $1 $2 $3,则 $1 以 tocke 的形式出现,而 $2 和 $3 不存在

【问题讨论】:

  • done 之后删除&lt; 以从标准输入读取。

标签: bash input


【解决方案1】:

&lt; 不是脚本的参数,bash 在调用脚本之前解释它。它重定向 stdin 以获取脚本的来源,在本例中为 somefile.txt

因此,您无需重定向任何内容即可从脚本中的文件读取,它可以从 stdin 读取,因为 shell 已经为您处理了输入重定向。

如果您想将文件名作为参数,只需从您的调用中删除&lt;,然后字符串somefile.txt 将存储在$2 中,您可以使用它来重定向您的输入while 循环,如果你喜欢或你可能有任何其他目的。

【讨论】:

  • 谢谢,你知道我会如何忽略以“#”开头的行
  • 在循环中,您可以执行if [[ "$line" =~ ^# ]]; then continue; fi 之类的操作来查看它是否以# 开头,如果是则继续循环
  • 正则表达式可以解决这个问题,或者只是添加一个 if 来验证你读入的第一个字符。回显到一个 tmp 变量,检查第一个字符,如果不是 # 插入它。跨度>
猜你喜欢
  • 2014-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 2015-08-24
相关资源
最近更新 更多