나는 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"