2017-12-02 1 views
1

루프에서 $ Table_Header_Labels의 요소를 가져 와서 문자열 길이에 사용되는 동일한 이름의 문자열을 가져 오려고합니다. 예 : 배열에서 "Apple"을 잡고 $ {Apple}을 (를) 문자열로 가져 오기 위해 $ Apple을 잡으려고 변환합니다.배열 요소를 복제본 변수로 변환 변수 이름

#!/bin/bash 

# Create Array 
declare -a Array=('Red' 'Blue' 'White'); 

# Set Variable 
Red="Apples are Red!" 

# Get Size of Variable from Array Element 
for i in ${Array[0]} 
do 
    Element=${i} 
    Element_Size="${i}_Size" 

    # Print the generated one 
    echo "$Element_Size = ${#Element}" 

    # Print correct one to compare 
    echo "Red_Size = ${#Red}" 
    echo "" 
done 

루프를 한 번만 돌리려고 의도적으로 작성했습니다. 현재 Red_Size는 배열 요소 자체를 3으로 계산합니다. 배열 요소를 가져 와서 배열 요소에 의해 복제 된 변수에 할당 된 문자열을 가져 오려고합니다.

기본 브레이크 다운 설명 : 애플 => $ 애플

은 BASH와이도 가능합니까?

+0

, 나는 이해하기 쉽도록 $ 배열로 $ Table_Header_Label을 변경. –

+0

아마 가능할 수도 있지만, 왜 이것을하고 싶습니까? – melpomene

+0

@melpomene 신속하게 루프에 넣을 수있는 모든 것에 필요한 약간의 코드가 있습니다. 모든면에서 거기에 외부 변수가 필요하다는 코드의 단일 비트가 있습니다. 그래서 어쨌든 변수를 생성하려면 변수를 생성해야합니다. 저를 위해서, 변수 자체를 사용하려고합니다. 단순함을 위해 변수를 호출해야합니다. –

답변

0

변수 이름이 변수 인 경우 ${!name} 구문을 사용할 수 있습니다. 예를 들어 i에 변수 이름 인 "Red"가 포함되어있는 경우 Red, 변수의 값을 얻으려면 을 입력하고 ${!i}을 쓸 수 있습니다. 스크립트에서

: 코드에서

Element=${!i} # if $i is "Red" -> $Red -> "Apples are Red!"