처음으로 Bash 완료를 작성하는 데 찌르는 듯하고, 역 참조 배역 배열 (${array[@]}
및 ${array[*]}
)에 대해 혼란스러워합니다.
_switch()
{
local cur perls
local ROOT=${PERLBREW_ROOT:-$HOME/perl5/perlbrew}
COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}
perls=($ROOT/perls/perl-*)
# remove all but the final part of the name
perls=(${perls[*]##*/})
COMPREPLY=($(compgen -W "${perls[*]} /usr/bin/perl" -- ${cur}))
}
배쉬의 documentation says :
배열의 요소 수
여기에 코드의 관련 덩어리가 (이 방법에 의해 작동하지만, 내가 더 잘 이해하고 싶습니다)입니다 $ {name [subscript]}를 사용하여 참조 할 수 있습니다. 중괄호는 쉘의 파일 이름 확장 연산자와의 충돌을 피하기 위해 필요합니다. 첨자가 '@'또는 '*'인 경우 단어는 배열 이름의 모든 멤버로 확장됩니다. 이 첨자는 단어가 큰 따옴표 안에 나타날 때만 다릅니다. 단어가 큰 따옴표로 묶여 있으면 $ {name [*]}은 IFS 변수의 첫 번째 문자로 구분 된 각 배열 구성원의 값으로 단일 단어로 확장되고 $ {name [@]}는 name의 각 요소를 확장합니다 별도의 단어로
지금 나는 compgen -W
이 가능한 대안의 단어 목록을 포함하는 문자열을 기대하는 이해 생각하지만,이 상황에서 나는 {이름은 [@]가} 별도의 단어 이름의 각 요소를 확장 무엇을 "$ 이해가 안 돼요 "의미합니다.
짧은 이야기 : ${array[*]}
작품; ${array[@]}
않습니다. 이유를 알고 싶습니다. 정확히 ${array[@]}
이 무엇으로 확장되는지 더 잘 이해하고 싶습니다.
이것은 훌륭합니다. 감사. 나는 그것이 정말로 더 크게 소리내어줬으면 좋겠지 만, 적어도 그것이 작동하지 않는 이유를 분명히하고있다. – Telemachus