Nushell
문서
쿡북
블로그
  • English
  • 中文
  • Deutsch
  • Français
  • Español
  • 日本語
  • Português do Brasil
  • Русский язык
  • 한국어
GitHub
문서
쿡북
블로그
  • English
  • 中文
  • Deutsch
  • Français
  • Español
  • 日本語
  • Português do Brasil
  • Русский язык
  • 한국어
GitHub
  • 소개
  • 설치하기
    • 기본 셸
  • 시작하기
    • 빠른 둘러보기
    • 시스템 이동
    • 누셸 방식으로 생각하기
    • 누셸 치트 시트
  • Nu 기본
    • 데이터 유형
    • 데이터 로드
    • 파이프라인
    • 문자열 작업
    • 목록 작업
    • 레코드 작업
    • 테이블 작업
    • 구조화된 데이터 탐색 및 액세스
    • 특수 변수
  • Nu에서 프로그래밍하기
    • 사용자 지정 명령
    • 별칭
    • 연산자
    • 변수
    • 제어 흐름
    • 스크립트
    • 모듈
      • 모듈 사용하기
      • 모듈 만들기
    • 오버레이
    • 정렬
    • 누셸 코드 테스트
    • 모범 사례
  • 셸로서의 Nu
    • 구성
    • 환경
    • 표준 출력, 표준 오류 및 종료 코드
    • 시스템(외부) 명령 실행
    • 타사 프롬프트 구성 방법
    • 디렉터리 스택
    • Reedline, Nu의 줄 편집기
    • 사용자 지정 완성
    • 외부 명령
    • Nu의 색상 지정 및 테마 설정
    • 후크
    • 백그라운드 작업
  • Nu로 전환하기
    • Bash에서 오신 분들을 위해
    • CMD.EXE에서 오신 분들을 위해
    • 다른 셸 및 도메인 특정 언어의 Nu 맵
    • 명령형 언어의 Nu 맵
    • 함수형 언어의 Nu 맵
    • 누셸 연산자 맵
  • 디자인 노트
    • 누셸 코드가 실행되는 방법
  • (약간)고급 사용법
    • 표준 라이브러리 (미리보기)
    • 데이터프레임
    • 메타데이터
    • 나만의 오류 만들기
    • 병렬 처리
    • 플러그인
    • explore

누셸 치트 시트

데이터 유형

문자열을 정수로 변환:

"12" | into int

현재 날짜를 제공된 시간대로 변환:

date now | date to-timezone "Europe/London"

레코드의 언어를 업데이트하고 지정되지 않은 경우 제공된 값을 삽입합니다.

{'name': 'nu', 'stars': 5, 'language': 'Python'} | upsert language 'Rust'

문자열 목록을 yaml로 변환:

[one two three] | to yaml

테이블 데이터 인쇄:

[[framework, language]; [Django, Python] [Laravel, PHP]]

테이블에서 두 개의 명명된 열을 선택하고 해당 값을 인쇄합니다.

[{name: 'Robert' age: 34 position: 'Designer'}
 {name: 'Margaret' age: 30 position: 'Software Developer'}
 {name: 'Natalie' age: 50 position: 'Accountant'}
] | select name position

문자열

텍스트 보간:

let name = "Alice"
$"greetings, ($name)!"
# => greetings, Alice!

쉼표 구분 기호로 텍스트를 분할하고 목록을 string_list 변수에 저장합니다.

let string_list = "one,two,three" | split row ","
$string_list
# => ╭───┬───────╮
# => │ 0 │ one   │
# => │ 1 │ two   │
# => │ 2 │ three │
# => ╰───┴───────╯

문자열에 하위 문자열이 포함되어 있는지 확인:

"Hello, world!" | str contains "o, w"
# => true

구분 기호로 여러 문자열 결합:

let str_list = [zero one two]
$str_list | str join ','
# => zero,one,two

인덱스로 텍스트 슬라이스:

'Hello World!' | str substring 4..8
# => o Wor

문자열을 명명된 열로 구문 분석:

'Nushell 0.80' | parse '{shell} {version}'
# => ╭───┬─────────┬─────────╮
# => │ # │  shell  │ version │
# => ├───┼─────────┼─────────┤
# => │ 0 │ Nushell │ 0.80    │
# => ╰───┴─────────┴─────────╯

쉼표로 구분된 값(csv) 구문 분석:

"acronym,long\nAPL,A Programming Language" | from csv
# => ╭───┬─────────┬────────────────────────╮
# => │ # │ acronym │          long          │
# => ├───┼─────────┼────────────────────────┤
# => │ 0 │ APL     │ A Programming Language │
# => ╰───┴─────────┴────────────────────────╯

명령줄 터미널에서 텍스트 색상 지정:

$'(ansi purple_bold)This text is a bold purple!(ansi reset)'
# => This text is a bold purple!

목록

인덱스에 목록 값 삽입:

[foo bar baz] | insert 1 'beeze'
# => ╭───┬───────╮
# => │ 0 │ foo   │
# => │ 1 │ beeze │
# => │ 2 │ bar   │
# => │ 3 │ baz   │
# => ╰───┴───────╯

인덱스로 목록 값 업데이트:

[1, 2, 3, 4] | update 1 10
# => ╭───┬────╮
# => │ 0 │  1 │
# => │ 1 │ 10 │
# => │ 2 │  3 │
# => │ 3 │  4 │
# => ╰───┴────╯

목록 값 앞에 추가:

let numbers = [1, 2, 3]
$numbers | prepend 0
# => ╭───┬───╮
# => │ 0 │ 0 │
# => │ 1 │ 1 │
# => │ 2 │ 2 │
# => │ 3 │ 3 │
# => ╰───┴───╯

목록 값 추가:

let numbers = [1, 2, 3]
$numbers | append 4
# => ╭───┬───╮
# => │ 0 │ 1 │
# => │ 1 │ 2 │
# => │ 2 │ 3 │
# => │ 3 │ 4 │
# => ╰───┴───╯

첫 번째 목록 값 슬라이스:

[cammomile marigold rose forget-me-not] | first 2
# => ╭───┬───────────╮
# => │ 0 │ cammomile │
# => │ 1 │ marigold  │
# => ╰───┴───────────╯

목록 반복, elt는 현재 목록 값입니다.

let planets = [Mercury Venus Earth Mars Jupiter Saturn Uranus Neptune]
$planets | each { |elt| $"($elt) is a planet of the solar system" }
# => ╭───┬─────────────────────────────────────────╮
# => │ 0 │ Mercury is a planet of the solar system │
# => │ 1 │ Venus is a planet of the solar system   │
# => │ 2 │ Earth is a planet of the solar system   │
# => │ 3 │ Mars is a planet of the solar system    │
# => │ 4 │ Jupiter is a planet of the solar system │
# => │ 5 │ Saturn is a planet of the solar system  │
# => │ 6 │ Uranus is a planet of the solar system  │
# => │ 7 │ Neptune is a planet of the solar system │
# => ╰───┴─────────────────────────────────────────╯

인덱스와 값으로 목록을 반복합니다.

$planets | enumerate | each { |elt| $"($elt.index + 1) - ($elt.item)" }
# => ╭───┬─────────────╮
# => │ 0 │ 1 - Mercury │
# => │ 1 │ 2 - Venus   │
# => │ 2 │ 3 - Earth   │
# => │ 3 │ 4 - Mars    │
# => │ 4 │ 5 - Jupiter │
# => │ 5 │ 6 - Saturn  │
# => │ 6 │ 7 - Uranus  │
# => │ 7 │ 8 - Neptune │
# => ╰───┴─────────────╯

목록을 단일 값으로 줄입니다. reduce는 목록의 각 요소에 적용되는 누산기에 대한 액세스를 제공합니다.

let scores = [3 8 4]
$"total = ($scores | reduce { |elt, acc| $acc + $elt })"
# => total = 15

초기 값으로 줄입니다(--fold).

let scores = [3 8 4]
$"total = ($scores | reduce --fold 1 { |elt, acc| $acc * $elt })"
# => total = 96

목록의 세 번째 항목에 대한 액세스를 제공합니다.

let planets = [Mercury Venus Earth Mars Jupiter Saturn Uranus Neptune]
$planets.2
# => Earth

목록의 문자열 중 E로 시작하는 것이 있는지 확인합니다.

let planets = [Mercury Venus Earth Mars Jupiter Saturn Uranus Neptune]
$planets | any {|elt| $elt | str starts-with "E" }
# => true

제공된 조건을 만족하는 항목을 슬라이스합니다.

let cond = {|x| $x < 0 }; [-1 -2 9 1] | take while $cond
# => ╭───┬────╮
# => │ 0 │ -1 │
# => │ 1 │ -2 │
# => ╰───┴────╯

테이블

테이블 정렬:

ls | sort-by size

테이블 정렬, 첫 번째 행 가져오기:

ls | sort-by size | first 5

동일한 열을 가진 두 테이블 연결:

let $a = [[first_column second_column third_column]; [foo bar snooze]]
let $b = [[first_column second_column third_column]; [hex seeze feeze]]
$a | append $b
# => ╭───┬──────────────┬───────────────┬──────────────╮
# => │ # │ first_column │ second_column │ third_column │
# => ├───┼──────────────┼───────────────┼──────────────┤
# => │ 0 │ foo          │ bar           │ snooze       │
# => │ 1 │ hex          │ seeze         │ feeze        │
# => ╰───┴──────────────┴───────────────┴──────────────╯

테이블의 마지막 열 제거:

let teams_scores = [[team score plays]; ['Boston Celtics' 311 3] ['Golden State Warriors', 245 2]]
$teams_scores | drop column
# => ╭───┬───────────────────────┬───────╮
# => │ # │         team          │ score │
# => ├───┼───────────────────────┼───────┤
# => │ 0 │ Boston Celtics        │   311 │
# => │ 1 │ Golden State Warriors │   245 │
# => ╰───┴───────────────────────┴───────╯

파일 및 파일 시스템

기본 텍스트 편집기로 텍스트 파일 열기:

start file.txt

문자열을 텍스트 파일에 저장:

'lorem ipsum ' | save file.txt

텍스트 파일 끝에 문자열 추가:

'dolor sit amet' | save --append file.txt

레코드를 file.json에 저장:

{ a: 1, b: 2 } | save file.json

파일 이름으로 파일 재귀적으로 검색:

glob **/*.{rs,toml} --depth 2

파일 감시, 변경될 때마다 명령 실행:

watch . --glob=**/*.rs {|| cargo test }

사용자 지정 명령

매개변수 유형이 문자열로 설정된 사용자 지정 명령:

def greet [name: string] {
    $"hello ($name)"
}

기본 매개변수가 누셸로 설정된 사용자 지정 명령:

def greet [name = "nushell"] {
    $"hello ($name)"
}

사용자 지정 명령에 대한 플래그를 정의하여 명명된 매개변수 전달:

def greet [
    name: string
    --age: int
] {
    [$name $age]
}

greet world --age 10

나이에 대한 약식 플래그(-a)가 있는 스위치로 플래그 사용:

def greet [
    name: string
    --age (-a): int
    --twice
] {
    if $twice {
        [$name $age $name $age]
    } else {
        [$name $age]
    }
}
greet -a 10 --twice hello

나머지 매개변수를 사용하여 임의의 수의 위치 인수를 사용하는 사용자 지정 명령:

def greet [...name: string] {
    print "hello all:"
    for $n in $name {
        print $n
    }
}
greet earth mars jupiter venus
# => hello all:
# => earth
# => mars
# => jupiter
# => venus

변수

불변 변수는 선언 후 값을 변경할 수 없습니다.

let val = 42
print $val
# => 42

변수 섀도잉(다른 범위에서 동일한 이름으로 변수 선언):

let val = 42
do { let val = 101;  $val }
# => 101
$val
# => 42

mut 키워드로 가변 변수 선언:

mut val = 42
$val += 27
$val
# => 69

클로저 및 중첩된 def는 환경에서 가변 변수를 캡처할 수 없습니다(오류).

mut x = 0
[1 2 3] | each { $x += 1 }
# => Error: nu::parser::expected_keyword
# =>
# =>   × Capture of mutable variable.
# =>    ╭─[entry #83:1:18]
# =>  1 │ [1 2 3] | each { $x += 1 }
# =>    ·                  ─┬
# =>    ·                   ╰── capture of mutable variable
# =>    ╰────

상수 변수는 불변이며 구문 분석 시 완전히 평가됩니다.

const file = 'path/to/file.nu'
source $file

제공된 경로가 잘못된 경우 오류 대신 null을 반환하려면 물음표 연산자 ?를 사용합니다.

let files = (ls)
$files.name?.0?

파이프라인 결과를 변수에 할당:

let big_files = (ls | where size > 10kb)
$big_files

모듈

인라인 모듈 사용:

module greetings {
    export def hello [name: string] {
        $"hello ($name)!"
    }

    export def hi [where: string] {
        $"hi ($where)!"
    }
}
use greetings hello
hello "world"

파일에서 모듈을 가져오고 현재 범위에서 해당 환경을 사용합니다.

# greetings.nu
export-env {
    $env.MYNAME = "Arthur, King of the Britons"
}
export def hello [] {
    $"hello ($env.MYNAME)"
}

use greetings.nu
$env.MYNAME
# => Arthur, King of the Britons
greetings hello
# => hello Arthur, King of the Britons!

모듈에서 주 명령 사용:

# greetings.nu
export def hello [name: string] {
    $"hello ($name)!"
}

export def hi [where: string] {
    $"hi ($where)!"
}

export def main [] {
    "greetings and salutations!"
}

use greetings.nu
greetings
# => greetings and salutations!
greetings hello world
# => hello world!
GitHub에서 수정하기
Contributors: lomm28, dlamei, Kingalidj, Dave Clausen, Justin Ma, SeerLite, Ian Manske, Devyn Cairns, Jakub Žádník, Stefan Holderbach, Rayan Amal, Jan Klass, monadix, Bruce Weirdan, Hofer-Julian, 0x4D5352, NotTheDr01ds, joshuanussbaum, Taeyoon Kim, ImgBotApp, google-labs-jules[bot], deepthought
Prev
누셸 방식으로 생각하기
Next
누셸 기본