2012-12-22 1 views
0

배열을 함수에 인수로 전달하고 배열에 새 요소를 추가하고 싶습니다. 그런 다음 배열을 다른 함수로 전달하고 해당 내용을 인쇄하십시오. (이 모든 배쉬 인치)Bash : 배열을 인수로 전달한 다음 새 요소를 추가하십시오.

syntax error near unexpected token `"$2"' 
`  $1+=("$2")' 

이 변수 $에 값을 할당 할 때 사용할 수 없습니다 아마 때문에, 내가 가진 전부입니다. 이 문제를 해결하는 방법을 모르겠습니다. 나 좀 도와 줄 수있어?

#/bin/bash 

add_element() 
{ 
    $1+=("$2") 
} 

print_array() 
{ 
    for i in "${$1[@]}" 
    do 
     echo "$i" 
    done 
} 

declare -a ARRAY 

add_element ARRAY "a" 
add_element ARRAY "b" 
add_element ARRAY "1,2" 
add_element ARRAY "d" 

print_array ARRAY 
+2

그래서 물어볼 수 있다면 질문은 무엇입니까 – Satya

+0

@Satya 실제 질문이 추가되었습니다. – szantaii

+0

add_element의 줄을 다음과 같이 변경하면 eval $ a + = '('$ * ')'; 그럼 당신은 황금해야합니다. – Orwellophile

답변

1

여기 간접 확장를 사용하여, 가능성의 :

여기 내 접근 방식입니다.

#/bin/bash 

add_element() 
{ 
    local a="$1[@]" 
    a=("${!a}") 
    printf -v "$1[${#a[@]}]" "%s" "$2" 
} 

print_array() 
{ 
    local a="$1[@]" 
    printf '%s\n' "${!a}" 
} 

declare -a array 

add_element array "a" 
add_element array "b" 
add_element array "1,2" 
add_element array "d" 

print_array array 

댓글 :

  • 정말 추한. 왜 내가 원하는지 모르겠다. bash는 이런 일을하도록 설계되지 않았다는 것을 알아 두십시오. 어쩌면 당신은 PHP 또는 펄이나 자바 또는 다른 것을 대신 사용하고 싶을 것이다.
  • bash에서 대문자 변수 이름을 사용하지 마십시오. 그것은 매우 나쁜 배쉬 연습으로 간주됩니다. 못 생겼어. 그것은 특히 다른 변수와 잠재적으로 충돌 할 때 특히 끔찍한데 누군가 mapfile 내장 (기본적으로 ARRAY이라는 배열에 저장)을 사용하는 경우 여기에 해당 될 수 있습니다.
  • 시도하고있는 것을 달성하기 위해 다른 것을 사용하십시오. 실제로 bash에서는 이러한 함수가 필요하지 않습니다.
+0

답변 해 주셔서 감사합니다. 그러나 나는 Bash의 한계를 테스트/밀어 내려고 노력하고있다. 변수 이름에 대한 조언을 주셔서 감사합니다. – szantaii