파일에서 변수를 정의하고 설정하는 방법은 무엇입니까?

파일에서 변수를 정의하고 설정하는 방법은 무엇입니까?

두 개의 파일이 있고 one.txt다른 two.txt.

one.txt 파일 내용:

"21"
"22"
"23"

2.txt 파일 내용:

"Hi how are you"
"Hello who are you"
"May I help you"

이제 첫 번째 줄을 추출 one.txt하고 시작 부분에 "_"(밑줄)을 추가하여 변수로 만든 다음 첫 번째 줄을 추출하여 two.txt선언된 변수에 할당하고 싶습니다. 즉, 다음과 같아야 합니다.

_21="Hi how are you"
_22="Hello who are you"
_23="May i help you"
echo $_21     #This should print "Hi how are you"

변수는 위와 같이 선언되어야 합니다. bash 스크립트를 사용하여 이 작업을 수행할 수 있습니까?

답변1

@αГsнιι의 답변과 같은 붙여넣기를 사용하지만 처리하기가 조금 더 쉽습니다.

while IFS=$'\t' read num value; do
  declare "_$num=$value"
done < <(paste {one,two}.txt)

그 다음에

$ echo "$_21"
Hi how are you

$ echo "$_22"
Hello who are you

$ echo "$_23"
May I help you

답변2

eval "$(paste -d"_=''" /dev/null <(tr -d \" <one) /dev/null two /dev/null)"

paste-d="..."목록에 정의된 구분 기호가 있는 파일/입력입니다.

/dev/null첫 번째 파일 콘텐츠를 생성하고 _두 번째 파일 two콘텐츠를 작은따옴표로 묶어 각 파일 콘텐츠가 확장되지 않도록 더미 입력 으로 사용합니다 (변수가 포함된 경우 명령 대체).

1.txt:

"21"
"22"
"23"

2.txt:

"Hi $(date) how are you"
"Hello who are you"
"May I help you"

출력은 다음과 같습니다

_21='"Hi $(date) how are you"'
_22='"Hello who are you"'
_23='"May I help you"'

$ echo "${_21}"
"Hi $(date) how are you"

관련 변수에 할당되기 전에 확장하려면 명령을 다음과 같이 변경하십시오.

$ eval "$(paste -d"_=" /dev/null <(tr -d \" <one) two )"
$ echo "${_21}"
Hi Tue 24 Nov 2020 12:47:40 AM +0330 how are you

관련 정보