스크립트를 통해 속성 파일을 읽는 방법은 무엇입니까?

스크립트를 통해 속성 파일을 읽는 방법은 무엇입니까?

나는 bash 쉘을 사용하고 있습니다. 속성 파일을 읽은 다음 파일에서 읽은 키 값 쌍을 기반으로 다른 파일에서 일부 대체를 수행하는 스크립트를 작성하려고 합니다. 그래서 나는 가지고있다

#!/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"

하지만 파일을 실행하려고 하면 파일이 존재하는데도 "해당 파일 또는 디렉터리 오류가 없습니다."라는 메시지가 나타납니다(확인 후 "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. (쉘은 명령에 대한 인수가 무엇인지 상관하지 않으며 등호를 인수로 사용하는 것이 있을 수 있습니다.) 이제 file공교롭게도 ,파일 형식을 식별하는 프로그램, 바로 그 일을 합니다. 먼저 open을 시도하면 =오류가 발생하고, open을 시도 /tmp/countries.properties하면 오류가 무엇인지 알 수 있습니다.

/tmp/countries.properties: ASCII text

다른 하나는 No such file or directory리디렉션에서 발생합니다 < $file. 변수에 값이 할당되지 않았기 때문에 리디렉션이 작동하지 않습니다.

셸의 할당 요구 사항은 다음과 같습니다.아니요플래그 주위에 공백이 있으므로 =다음과 같습니다.

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"

관련 정보