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

목록 작업

팁

목록은 테이블의 개별 열과 동일합니다. 목록을 본질적으로 "열 이름이 없는 한 열 테이블"로 생각할 수 있습니다. 따라서 열에서 작동하는 모든 명령은 목록에서도 또한 작동합니다. 예를 들어, where는 목록과 함께 사용할 수 있습니다.

[bell book candle] | where ($it =~ 'b')
# => ╭───┬──────╮
# => │ 0 │ bell │
# => │ 1 │ book │
# => ╰───┴──────╯

목록 만들기

목록은 순서가 지정된 값 모음입니다. 목록은 공백, 줄 바꿈 및/또는 쉼표로 구분된 값을 둘러싼 대괄호를 사용하여 만듭니다. 예를 들어, [foo bar baz] 또는 [foo, bar, baz]입니다.

팁

누셸 목록은 JSON 배열과 유사합니다. JSON 배열을 나타내는 동일한 [ "Item1", "Item2", "Item3" ]을 사용하여 누셸 목록을 만들 수도 있습니다.

목록 업데이트

파이프라인을 통해 흐르는 목록에 값을 insert할 수 있습니다. 예를 들어 목록 중간에 값 10을 삽입해 보겠습니다.

[1, 2, 3, 4] | insert 2 10
# => [1, 2, 10, 3, 4]

update를 사용하여 두 번째 요소를 값 10으로 바꿀 수도 있습니다.

[1, 2, 3, 4] | update 1 10
# => [1, 10, 3, 4]

목록에서 항목 제거 또는 추가

insert 및 update 외에도 prepend 및 append가 있습니다. 이를 통해 각각 목록의 시작 또는 끝에 삽입할 수 있습니다.

예시:

let colors = [yellow green]
let colors = ($colors | prepend red)
let colors = ($colors | append purple)
let colors = ($colors ++ ["blue"])
let colors = (["black"] ++ $colors)
$colors
# => [black red yellow green purple blue]

목록에서 항목을 제거하려는 경우 여러 가지 방법이 있습니다. skip을 사용하면 입력에서 첫 번째 행을 건너뛸 수 있고, drop을 사용하면 목록 끝에서 특정 번호가 매겨진 행을 건너뛸 수 있습니다.

let colors = [red yellow green purple]
let colors = ($colors | skip 1)
let colors = ($colors | drop 2)
$colors
# => [yellow]

또한 각각 목록의 끝 또는 시작에서 take할 수 있는 last 및 first도 있습니다.

let colors = [red yellow green purple black magenta]
let colors = ($colors | last 3)
$colors
# => [purple black magenta]

그리고 목록의 시작부터,

let colors = [yellow green purple]
let colors = ($colors | first 2)
$colors
# => [yellow green]

스프레드 연산자 사용

하나 이상의 목록을 함께 추가하고 선택적으로 그 사이에 값을 산재시키려면 스프레드 연산자(...)를 사용할 수도 있습니다.

let x = [1 2]
[
  ...$x
  3
  ...(4..7 | take 2)
]
# => ╭───┬───╮
# => │ 0 │ 1 │
# => │ 1 │ 2 │
# => │ 2 │ 3 │
# => │ 3 │ 4 │
# => │ 4 │ 5 │
# => ╰───┴───╯

목록 반복

목록의 항목을 반복하려면 각 항목에 대해 수행할 작업을 지정하는 Nu 코드 블록과 함께 each 명령을 사용합니다. 블록 매개변수(예: { |elt| print $elt }의 |elt|)는 현재 목록 항목이지만, 필요한 경우 index 및 item 값을 제공하기 위해 enumerate 필터를 사용할 수 있습니다. 예시:

let names = [Mark Tami Amanda Jeremy]
$names | each { |elt| $"Hello, ($elt)!" }
# "Hello, Mark!"와 세 개의 유사한 줄을 출력합니다.

$names | enumerate | each { |elt| $"($elt.index + 1) - ($elt.item)" }
# "1 - Mark", "2 - Tami" 등을 출력합니다.

where 명령을 사용하여 목록의 하위 집합을 만들 수 있으며, 조건을 기반으로 목록을 효과적으로 필터링합니다.

다음 예제는 이름이 "e"로 끝나는 모든 색상을 가져옵니다.

let colors = [red orange yellow green blue purple]
$colors | where ($it | str ends-with 'e')
# `where`에 전달된 블록은 부울로 평가되어야 합니다.
# 이것은 [orange blue purple] 목록을 출력합니다.

이 예제에서는 7보다 큰 값만 유지합니다.

let scores = [7 10 8 6 7]
$scores | where $it > 7 # [10 8]

reduce 명령은 목록에서 단일 값을 계산합니다. 두 개의 매개변수를 사용하는 블록을 사용합니다. 현재 항목(일반적으로 elt로 명명됨)과 누산기(일반적으로 acc로 명명됨)입니다. 누산기의 초기 값을 지정하려면 --fold (-f) 플래그를 사용하십시오. elt를 index 및 item 값을 갖도록 변경하려면 enumerate 필터를 사용하십시오. 예시:

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

$"total = ($scores | math sum)" # 더 쉬운 접근 방식, 동일한 결과

$"product = ($scores | reduce --fold 1 { |elt, acc| $acc * $elt })" # product = 96

$scores | enumerate | reduce --fold 0 { |elt, acc| $acc + $elt.index * $elt.item } # 0*3 + 1*8 + 2*4 = 16

목록 액세스

참고

다음은 기본 개요입니다. 이 주제에 대한 자세한 내용은 구조화된 데이터 탐색 및 액세스 장을 참조하십시오.

지정된 인덱스에서 목록 항목에 액세스하려면 $name이 목록을 보유하는 변수인 $name.index 형식을 사용합니다.

예를 들어, 아래 목록의 두 번째 요소는 $names.1로 액세스할 수 있습니다.

let names = [Mark Tami Amanda Jeremy]
$names.1 # Tami를 제공합니다.

인덱스가 일부 변수 $index에 있는 경우 get 명령을 사용하여 목록에서 항목을 추출할 수 있습니다.

let names = [Mark Tami Amanda Jeremy]
let index = 1
$names | get $index # Tami를 제공합니다.

length 명령은 목록의 항목 수를 반환합니다. 예를 들어, [red green blue] | length는 3을 출력합니다.

is-empty 명령은 문자열, 목록 또는 테이블이 비어 있는지 여부를 결정합니다. 목록과 함께 다음과 같이 사용할 수 있습니다.

let colors = [red green blue]
$colors | is-empty # false

let colors = []
$colors | is-empty # true

in 및 not-in 연산자는 값이 목록에 있는지 여부를 테스트하는 데 사용됩니다. 예시:

let colors = [red green blue]
'blue' in $colors # true
'yellow' in $colors # false
'gold' not-in $colors # true

any 명령은 목록의 모든 항목이 주어진 조건을 만족하는지 여부를 결정합니다. 예시:

let colors = [red green blue]
# 색상 이름이 "e"로 끝나는 것이 있습니까?
$colors | any {|elt| $elt | str ends-with "e" } # true

# 색상 이름의 길이가 3보다 작은 것이 있습니까?
$colors | any {|elt| ($elt | str length) < 3 } # false

let scores = [3 8 4]
# 7보다 큰 점수가 있습니까?
$scores | any {|elt| $elt > 7 } # true

# 홀수인 점수가 있습니까?
$scores | any {|elt| $elt mod 2 == 1 } # true

all 명령은 목록의 모든 항목이 주어진 조건을 만족하는지 여부를 결정합니다. 예시:

let colors = [red green blue]
# 모든 색상 이름이 "e"로 끝납니까?
$colors | all {|elt| $elt | str ends-with "e" } # false

# 모든 색상 이름의 길이가 3 이상입니까?
$colors | all {|elt| ($elt | str length) >= 3 } # true

let scores = [3 8 4]
# 모든 점수가 7보다 큽니까?
$scores | all {|elt| $elt > 7 } # false

# 모든 점수가 짝수입니까?
$scores | all {|elt| $elt mod 2 == 0 } # false

목록 변환

flatten 명령은 중첩된 목록의 항목을 최상위 목록에 추가하여 기존 목록에서 새 목록을 만듭니다. 이것은 모든 깊이에서 중첩된 목록을 평탄화하기 위해 여러 번 호출할 수 있습니다. 예시:

[1 [2 3] 4 [5 6]] | flatten # [1 2 3 4 5 6]

[[1 2] [3 [4 5 [6 7 8]]]] | flatten | flatten | flatten # [1 2 3 4 5 6 7 8]

wrap 명령은 목록을 테이블로 변환합니다. 각 목록 값은 단일 열이 있는 별도의 행으로 변환됩니다.

let zones = [UTC CET Europe/Moscow Asia/Yekaterinburg]

# 선택한 시간대에 대한 세계 시계 표시
$zones | wrap 'Zone' | upsert Time {|row| (date now | date to-timezone $row.Zone | format date '%Y.%m.%d %H:%M')}
GitHub에서 수정하기
Contributors: Taeyoon Kim, ImgBotApp, google-labs-jules[bot], deepthought
Prev
문자열 작업
Next
레코드 작업