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

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

저는 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작업합니다.

관련 정보