如何通过脚本读取属性文件?

如何通过脚本读取属性文件?

我正在使用 bash shell。我正在尝试编写一个脚本,该脚本将读取属性文件,然后根据它在文件中读取的键值对在另一个文件中进行一些替换。所以我有

#!/bin/bash

file = "/tmp/countries.properties"

while IFS='=' read -r key value
do
  echo "${key} ${value}" 
  sed -ie 's/:iso=>"${key}"/:iso=>"${key}",:alpha_iso=>"${value}"/g' /tmp/country.rb
done < "$file"

但是当我去运行该文件时,我收到“Nno such file or directory error”,尽管我的文件存在(我在验证它之后执行了“ls”)。

localhost:myproject davea$ sh /tmp/script.sh 
=:                         cannot open `=' (No such file or directory)
/tmp/countries.properties: ASCII text
/tmp/script.sh: line 9: : No such file or directory
localhost:myproject davea$ 
localhost:myproject davea$ ls /tmp/countries.properties 
/tmp/countries.properties

我还需要做什么才能成功读取我的属性文件?

答案1

错误就在那里:

=:                         cannot open `=' (No such file or directory)

有东西正在尝试打开名为 的文件=,但该文件不存在。

/tmp/script.sh: line 9: : No such file or directory

这通常在最后一个冒号之前有文件名,但由于它是空的,似乎有东西试图打开一个空名称的文件。

考虑这一行:

file = "/tmp/countries.properties"

file这将运行带有参数=和 的命令/tmp/countries.properties。 (shell 不关心命令的参数是什么,可能有一些东西使用等号作为参数。)现在,file碰巧是用于识别文件类型的程序,它就是这样做的。首先尝试打开=,导致错误,然后打开/tmp/countries.properties,告诉你它是什么:

/tmp/countries.properties: ASCII text

另一个No such file or directory来自重定向< $file。由于该变量未分配值,因此重定向将不起作用。

shell 中的赋值要求有标志周围有空白=,因此:

file=/tmp/countries.properties

也在这里:

sed -ie 's/:iso=>"${key}"/:iso=>"${key}",:alpha_iso=>"${value}"/g'

变量不会在单引号内扩展,并且您在整个第二个参数周围都包含变量,因此sed将获得文字${key}而不是变量的内容。

要么用单引号结束来扩展变量,要么只对整个字符串使用双引号:

sed -ie 's/:iso=>"'${key}'"/:iso=>"'${key}'",:alpha_iso=>"'${value}'"/g' 
sed -ie "s/:iso=>\"${key}\"/:iso=>\"${key}\",:alpha_iso=>\"${value}\"/g"

答案2

尝试:

file="/tmp/countries.properties"

相关内容