fish(유닉스 셸)

fish (Unix shell)
물고기.
Fish shell logo ascii.png
Fish shell 3.3.1 screenshot.png
어패류.태그라인 "fish - the friendly interactive shell"이 맨 위에 표시됩니다.
원저작자액셀 릴옌크란츠
개발자어패류[1] 개발업자
초기 릴리즈2005년 2월 13일, 17년 전(2005-02-13)
안정된 릴리스
3.5.1[2] / 2022년 7월 20일; 19일 전 (2022년 7월 20일)
저장소
기입처C++
운영 체제Unix와 같은
유형Unix 쉘
면허증.GPL-2.0 전용[3]
웹 사이트fishshell.com

fish는 인터랙티브성과 조작성에 중점을 둔 Unix 쉘입니다.Fish는 구성이 [4]아닌 기본적으로 사용자에게 기능을 제공하도록 설계되었습니다.물고기는 관리인의 [5]재량에 따라 POSIX 조개껍데기 기준을 엄격하게 준수하지 않기 때문에 외래 조개껍데기로 간주됩니다.

하이라이트

Fish는 기록 및 현재 디렉토리를 기반으로 "입력할 때 검색" 자동 제안을 제공합니다.이것은 본질적으로 Bash의 것과 같다.+ 이력 검색은 별도의 모드가 아닌 항상 켜져 있기 때문에 사용자는 명령줄 작성 중에 지속적인 피드백을 받고 화살표 키로 제안을 선택하거나 Bash에서와 같이 탭 완료를 누릅니다Ctrl.R 완성은 기능이 풍부하고 파일 경로(와일드카드 브레이스 확장 포함), 변수 및 많은 명령별 완성이 있습니다.설명이 포함된 옵션을 포함한 명령별 완료는 명령어의 man 페이지에서 어느 정도 생성할 수 있습니다.

Fish에는 구문 규칙이 거의 없으며 구문보다는 명령어로 기능을 선호합니다.이를 통해 옵션 및 도움말 텍스트가 포함된 명령어 측면에서 기능을 검색할 수 있습니다.함수는 사람이 읽을 수 있는 설명을 전달할 수도 있습니다.특별한 도움말 명령을 사용하면 사용자의 웹 [6]브라우저에 있는 모든 Fish 문서에 액세스할 수 있습니다.

구문

이 구문은 POSIX 호환 셸(Bash 등)과 유사하지만 POSIX 쉘이 잘못 [7]설계되었다고 제작자가 생각하는 중요한 부분에서 벗어납니다.

# 변수 할당, 변수 'foo'를 # 값 'bar' 설정합니다.  #는 본질적으로 공백에 민감하므로 Fish는 = 연산자를 사용하지 않습니다.  또한 set # 명령어어레이, 스코핑 등> set foo bar > echo $foo bar # 명령어 치환으로 쉽게 확장할 수 있습니다.명령어 #의 출력을 변수 wd에 할당합니다.  버전 3.4 > echo $wd ~# Array 변수 이후 Fish는 "#"을 사용하지 않습니다.또한 ""과 매우 비슷합니다.> set wd (pwd)> set wd $ (pwd) #"과 비슷합니다. 'A'는 5개의 값을 가진 배열이 됩니다.> A 3 5 7 9 12 # Array slicing 'B' becomes the first two elements of 'A': > set B $A[1 2] > echo $B 3 5 # You can index with other arrays and even command  # substitution output: > echo $A[(seq 3)] 3 5 7 # Erase the third and fifth elements of 'A' > set --erase A[$B] > echo $A 3 5 9  # for-loop, convert jpegs to pngs > for i in *.jpg       convert $i (basename달러 나는 .jpg).pngd # 세미콜론은 줄바꿈과 같이 동작합니다.*.jpg에서는 i경우 >, $i(기본명 $i.jpg.png)의 변환, 번호이지만 #fish는 여러 줄의 이력 편집을 지원하므로 여러 줄의 형식을 사용하기 편리합니다.# while-loop 행 /etc/passwd를 읽고 파일에서 다섯 번째 # 콜론으로 구분된 필드출력합니다. 사용자 설명 # 여야 합니다.> line set arr ( echo $line tr : \n ) echo $arr [ 5 ]end < /etc / passwd # 문자열 치환 (모든 i를 I로 대체)> 문자열 치환 - a " I" "Wikipedia" WiKipedia

암묵적인 서브셸 없음

파이프라인, 함수 루프와 같은 일부 언어 구조는 다른 셸 언어에서 소위 하위 쉘을 사용하여 구현되었습니다.서브셸은 단순히 셸에 대해 몇 가지 명령을 실행한 후 종료하는 하위 프로그램입니다.안타깝게도 이 구현 상세에는 일반적으로 변수 할당 등 서브셸에서 이루어진 모든 상태 변경이 메인셸로 전파되지 않아 사용자가 놀랄 수 있습니다.생선은 소위 서브셸이라고 불리는 껍데기를 분리하지 않는다. 모든 내장물은 항상 완벽하게 기능한다.

# 다른 많은 셸에서는 동작하지 않습니다.왜냐하면 'read' builtin # 자체 서브셸에서 실행되기 때문입니다. Bash에서는 파이프 #오른쪽에는 부작용이 있을없습니다. ksh에서는 다음 명령어가 작동하지만 # 왼쪽에는 부작용이 없습니다. 피쉬와 zsh에서는 양쪽 #이 모두 부작용이 발생할 수 있습니다.> cat *.txt 읽기 

변수 할당 예시

이 Bash 예제에서는 루프 본문이 서브셸이기 때문에 업데이트는 다음과 같이 처리되지 않습니다.$found지속적이지 않습니다.

dev mnt rest를 읽는 동안 =' cat /etc/fstab찾았습니다. "$mnt" = "/"이면 작업수행다음 found="$dev" fi를 찾았습니다.

회피책:

dev mnt rest를 읽는 동안 found="를 찾았습니다. 테스트 "$mnt" = "/"이면 found="$dev" fi done < /etc/fstab

Fish에는 회피책이 필요 없습니다.

테스트 "$mnt" = "/" 집합이 $dev end 찾은 경우 dev mnt rest를 읽는 동안 set에서 cat /etc/fstab을 찾았습니다.

유용한 오류 메시지

물고기의 오류 메시지는 실제로 사용자에게 무엇이 잘못되었고 [8]무엇을 할 수 있는지 알려주기 위해 고안되었습니다.

> foo=바 fish: 알 수 없는 명령 "foo=bar"입니다."변수값 설정"을 의미합니까? 변수 값의 설정에 대한 자세한 내용은 의 도움말 섹션을 참조하십시오. "help set"를 입력하여 set 명령을 실행합니다.  > 에코 ${foo}바 fish: {$VARILE}을(를) 의미했습니까?'
                
문자는 변수를 시작합니다. 이름. '
$$SIDE_BOTTOM$$
    $$BOTTOM$$