【问题标题】:How to read cat $1 into a bash variable [duplicate]如何将 cat $1 读入 bash 变量 [重复]
【发布时间】:2021-06-22 10:22:21
【问题描述】:

也许我问错了这个问题,但我似乎无法在任何地方找到答案。我要做的是从脚本调用(./script.sh Textile.txt)传递的文本文件中读取行并将其读入变量。我的代码是:

function read_hosts{
hosts = $(cat "$1")
}

read_hosts $@

脚本调用是:

./nexthelper.sh hosts.txt

而且,hosts.txt 包含以下内容:

localhost
www.google.com

当我运行代码时,它会在 hosts = 行上引发语法错误。任何帮助将不胜感激!

【问题讨论】:

  • 在此处发布之前,请使用 shellcheck.net 检查您的脚本。
  • 这能回答你的问题吗? Creating an array from a text file in Bashmapfile -t hosts <"$1"
  • KamilCuk,我不知道那个网站。感谢您的分享! LéaGris,我会查看该页面,看看是否有帮助。谢谢!

标签: bash variables cat


【解决方案1】:

编辑 OP 确认= 周围没有错误语法错误后

建议使用这种语法,因为你习惯了 C++
函数定义缺少() 跟在名称后面

function read_hosts(){
    # ...
}

其他语法

  • 如果函数名后有空格或换行,()可以省略
function function_name {
}
  • 如果使用(),则function 关键字是可选的

bash 中为变量赋值(或设置变量)的语法是

variableName=variableValue

注意= 两边的空间不足。

这是因为 bash 将由空格包围的所有内容拆分为一个命令。所以当你尝试hosts = "something" 时,bash 本质上是在尝试执行一个名为 hosts 的命令,然后是一个名为 = 的命令和一个名为 something 的命令。

删除空格告诉 bash 您正在尝试为变量赋值。

以下是我个人用来学习 bash 的一些资源:

【讨论】:

  • 等等...在我的代码中,它没有被隔开。我更习惯于用 C++ 编码,所以我会不假思索地把东西分开。它没有被隔开,它仍然会引发错误。
  • 啊。专注于你所说的关于= 和我错过其他语法错误的空格
  • 添加了更新。但我希望你现在用shellcheck.net 修复它?
猜你喜欢
  • 2017-02-20
  • 2021-10-02
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 2013-06-30
  • 2012-06-01
相关资源
最近更新 更多