
저는 Fish 버전 3.7.0을 실행 중이고 색인을 기반으로 목록에서 요소를 제거하는 함수를 작성하고 싶습니다.
예를 들어, 인덱스 2의 PATH 환경 변수에서 요소를 제거하고 싶습니다.
set -l variable_name PATH
set -l index 2
set -e $variable_name[$index]
그러나 다음 명령문은 작동하지 않고 다음을 반환합니다.
set: --erase: 옵션에 인수가 필요합니다.
변수 이름(예: PATH)을 얻으려면 약간의 지연 평가가 필요하다는 것을 알지만 어떻게 해야 할지 모르겠습니다.
답변1
문제는 fish가 $var[$foo]
"$var 확장, $foo 확장 및 둘 다 함께 연결"하려는 "$var의 footh 요소"로 사용된다는 것입니다.
원하는 것을 표현하기 위해 다양한 방법을 사용할 수 있으며, 가장 깔끔한 방법은 아마도 다음과 같습니다.
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