이것은 정말 구체적인 질문입니다. 나는 그것의 외모로 효율성의 이름에서 필요보다 더 복잡했을 수도있는 스크립트를 만들었습니다. 정말 효율적입니까? 몰라요 그것을 쓰는 올바른 방법입니까? 몰라요
그래서이 질문을하는 이유는 아래 코드를 작성하는 방법을 향상시킬 수 있는지 알고 싶습니다. 그것이 분명하지 않으면 나는 강타하는 초보자이지만 스크립트는 그 목적을 완성합니다.
이 코드는 변수를 정의하려고 s$counter= s1, s2, s3, s4...
이전에 정의 된 변수의 측면에서 s1$j
와 s2$j
함께 j
목록 (이전에 정의)의 아이템 인 문자열.
counter=1
for j in ${list[@]}
do
eval s$counter=$(eval "echo \$s1$j")
eval s$((counter+1))=$(eval "echo \$s2$j")
counter=$((counter+2))
done
혼란 스럽지만 나와는 맨손이었습니다. 내부 eval
는 $(eval "echo \$s1$j")
es의 값을 반환한다는 의미입니다 s1$j
. 두 번째 eval
는 eval s$counter =...
은 변수를 정의하는 것을 의미합니다.s1, s2, s3, s4 ...
그래서 예는 다음과 같습니다의 첫 번째 FOOR 루프 말할 수 있도록 j=a
다음 $(eval "echo \$s1$j") == $s1a
의 값으로, s1a
예를 들어는 "하자, 이전의 스크립트에서 정의 된 s1a=10
"그래서 두 번째 경우에, eval
우리는 내용의 명령을 평가한다 " s1=10
".
그것은 작동하지만, 이것이 가능한 메모리 위협이나 그와 비슷한 무언가를 일으킬 수 있습니까?
이 코드 줄과 동일한 아이디어입니다.
eval $(echo "sed -i '$(eval echo '17i$sed17line')' $file")
어디는 sed17line
내가의 라인 (17)에 추가 할 것입니다 file
. 그것은 내가 변수로 사용하고 따라서 나는의 조합을 사용하고 왜 이유에 대한 스크립트를 사용하려는 작업에 따라 달라집니다 echo
및 eval
.
다시, 나는 그 결과가 내가 원했던 것이 될 때까지 그 의미에 대해 생각할 수있는 모든 것을 시도했다.
나는 모든 것이 올바른지 확인하고 정보를 찾아야하는 곳에서 개선 할 수있는 방법이 있는지 확인하고 싶습니다. 감사!