예시 파일:
/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"
등.