![이러한 파일을 어떻게 구문 분석하고 변수를 정의할 수 있나요? [폐쇄]](https://linux55.com/image/79713/%EC%9D%B4%EB%9F%AC%ED%95%9C%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%EA%B5%AC%EB%AC%B8%20%EB%B6%84%EC%84%9D%ED%95%98%EA%B3%A0%20%EB%B3%80%EC%88%98%EB%A5%BC%20%EC%A0%95%EC%9D%98%ED%95%A0%20%EC%88%98%20%EC%9E%88%EB%82%98%EC%9A%94%3F%20%5B%ED%8F%90%EC%87%84%5D.png)
예시 파일:
/Variable1=Value1/Variable2=Value Value Value/Variable3=Value3 Value3/
변수를 읽고 설정하고 싶습니다. 이는 내가 입력 echo $Variable1
하고 Value1
출력 등을 얻을 수 있음을 의미합니다 . 많은 것을 시도했지만 너무 길고 변수 이름이 변경되면 작동하지 않습니다. 효과적인 방법을 아는 사람이 있나요?
답변1
bash
출발점 은 다음과 같습니다 .
OIFS="$IFS"
IFS=/; set -f
for piece in $(cat file)
do
var=$(echo "$piece" | cut -d= -f1)
val=$(echo "$piece" | cut -d= -f2-)
[ -n "$var" ] && eval $var=\"$val\"
done
IFS="$OIFS"
unset piece var val
빈 변수 이름은 건너뛰지만 변수 이름 자체에 대한 온전성 검사는 수행되지 않습니다.
두 번째 방법은 다음과 같은 방법을 찾기로 결심했기 때문입니다 read
.
declare -a vars
IFS=/ read -a vars < file
for piece in ${vars[*]}
do
mangle=$(echo "$piece" | sed 's/=\(.*\)/="\1"/')
eval $mangle
done
unset vars piece mangle
맹글 라인은 단순히 등호 뒤의 값을 참조하는 데 사용됩니다.
답변2
. <(
awk '
BEGIN{RS="/";FS="="}
NF==2{printf "%s=\"%s\"\n", $1, $2}
' file
)
awk
이는 다음 텍스트를 만드는 데 사용됩니다 .
Variable1="Value1"
Variable2="Value Value Value"
Variable3="Value3 Value3"
이는 출처이므로 Variable{1,2,3}
에서 찾을 수 있습니다 sh
.
몇 가지 사항: 값에 ant 또는 가 포함되지 않은 것으로 /
가정 =
됩니다 "
.
답변3
$ printf "%s\n" "$Variable1" "$Variable2" "$Variable3"
$ cat file
/Variable1=Value1/Variable2=Value Value Value/Variable3=Value3 Value3/
$ source <(tr / "\n" < file | sed -r 's/=(.*)/="\1"/')
$ printf "%s\n" "$Variable1" "$Variable2" "$Variable3"
Value1
Value Value Value
Value3 Value3
답변4
Bash의 경우: (문자열이 "liste.txt"라는 파일에 있는 경우)
IFS="/"
for val in $(cat liste.txt); do echo "$val" | sed -r "s/=(.*)$/=\"\1\"/g" | eval; done
그 후에는 다음을 시도해 보세요.
echo "$Varaible1"
echo "$Variable2"
등.