저는 Fish 버전 3.7.0을 실행 중이고 색인을 기반으로 목록에서 요소를 제거하는 함수를 작성하고 싶습니다.
예를 들어, PATH 환경 변수에서 인덱스 2의 요소를 제거하고 싶습니다.
set -l variable_name PATH
set -l index 2
set -e $variable_name[$index]
그러나 다음 명령문은 작동하지 않고 다음을 반환합니다.
set: --erase: 옵션에 인수가 필요합니다.
변수 이름(예: PATH)을 얻으려면 약간의 지연 평가가 필요하다는 것을 알았지만 어떻게 해야 할지 모르겠습니다.
답변1
문제는 fish가 이를 $var[$foo]
"$var의 footh 요소"로 취급하므로 "$var를 확장하고 $foo를 확장한 다음 두 요소를 함께 추가"해야 한다는 것입니다.
원하는 것을 다양한 방법으로 표현할 수 있으며 가장 간결한 방법은 다음과 같습니다.
set -e $variable_name[1][$index]
이는 $variable_name("PATH")의 첫 번째 요소를 확장하고 다른 요소는 []
구문적으로 특별한 것이 없으므로 결국 실행됩니다.
set -e PATH[2]
당신이 원하는 대로.
대안으로는 인용( set -e "$variable_name"[$index]
), 중괄호 확장( set -e {$variable_name}[$index]
)이 있습니다. 실제로 는 부분을 $var
에서 분리하면 됩니다 [$foo]
. 인덱스를 설정 [2]
하고 사용하는 것 까지 set -e $variable_name$index
작업합니다.