Fish는 목록에서 요소를 제거하기 위해 게으른 평가가 필요합니다.

Fish는 목록에서 요소를 제거하기 위해 게으른 평가가 필요합니다.

저는 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

관련 정보