쉘 스크립트 작성 중 이해가 동작을 안하는 부분이 있어서 질문을 올립니다.

익명 사용자의 이미지

쉘 스크립트 작성 중 이해가 동작을 안하는 부분이 있어서 질문을 올립니다.

i=1
for w in $(ls -l ~/some |grep "^d"|awk '{print $9}')
do
	me_ref_$i=$(ls -l ~/some/$w/Ref | grep "^d" | awk '{print $9}')
	me_var_$i=$w

문제가 되는 코드는 이 부분입니다. 이것의 결과는

./trainset_make: line 61: me_ref_1=clock: command not found
./trainset_make: line 62: me_var_1=min: command not found

이런 오류가 나와서 구글에서 찾아봐

	me_ref_$i=`ls -l ~/some/$w/Ref | grep "^d" | awk '{print $9}'`

backtick을 이용해서 명령어 저장 또한 해봐도 동일한 오류가 나옵니다.

원인이 뭔가요?

익명 사용자의 이미지

아 me_ref_1을 clock, me_var_1을 min이란 이름으로 변수 지정하려 하는 것은 맞습니다. 하지만 오류가 나온 상황입니다.

chanik의 이미지

며칠전에 올라온 https://kldp.org/node/164544 글에 같은 맥락(변수명이 런타임에 동적으로 결정됨)의 질문/답변이 있으니 참고하시고요.

아래와 같이 eval 넣으면 될겁니다.

	eval me_ref_$i=$(ls -l ~/some/$w/Ref | grep "^d" | awk '{print $9}')
	eval me_var_$i=$w

변수값 사용할 때는 eval과 \$. 테스트해보고 목적에 맞게 만져서 쓰시면 되겠습니다.

	eval echo \$me_ref_$i
	eval echo \$me_var_$i