Bagikan melalui


2. Struktur Leksikal

Catatan editorial

Penting

Spesifikasi Bahasa Windows PowerShell 3.0 diterbitkan pada Desember 2012 dan didasarkan pada Windows PowerShell 3.0. Spesifikasi ini tidak mencerminkan status PowerShell saat ini. Tidak ada rencana untuk memperbarui dokumentasi ini untuk mencerminkan status saat ini. Dokumentasi ini disajikan di sini untuk referensi historis.

Dokumen spesifikasi tersedia sebagai dokumen Microsoft Word dari Pusat Unduh Microsoft di: https://www.microsoft.com/download/details.aspx?id=36389 Dokumen Word telah dikonversi untuk presentasi di sini di Microsoft Pelajari. Selama konversi, beberapa perubahan editorial telah dilakukan untuk mengakomodasi pemformatan untuk platform Dokumen. Beberapa kesalahan ketik dan kesalahan kecil telah dikoreksi.

2.1 Tata Bahasa

Spesifikasi ini memperlihatkan sintaks bahasa PowerShell menggunakan dua tata bahasa. Tata bahasa leksikal (§B.1) menunjukkan bagaimana karakter Unicode digabungkan untuk membentuk terminator baris, komentar, spasi kosong, dan token. Tata bahasa sintetis (§B.2) menunjukkan bagaimana token yang dihasilkan dari tata bahasa leksikal digabungkan untuk membentuk skrip PowerShell.

Untuk kenyamanan, fragmen tata bahasa ini direplikasi di tempat yang sesuai di seluruh spesifikasi ini.

Setiap penggunaan karakter 'a' sampai 'z' dalam tata bahasa tidak peka terhadap huruf besar dan kecil. Ini berarti bahwa huruf besar/kecil dalam variabel, alias, nama fungsi, kata kunci, pernyataan, dan operator diabaikan. Namun, sepanjang spesifikasi ini, nama-nama tersebut ditulis dalam huruf kecil, kecuali untuk beberapa variabel otomatis dan preferensi.

2.2 Analisis leksikal

2.2.1 Skrip

Sintaksis:

Petunjuk / Saran

Notasi ~opt~ dalam definisi sintaks menunjukkan bahwa entitas leksikal bersifat opsional dalam sintaks.

input:
    input-elements~opt~   signature-block~opt~

input-elements:
    input-element
    input-elements   input-element

input-element:
    whitespace
    comment
    token

signature-block:
    signature-begin   signature   signature-end

signature-begin:
    new-line-character   # SIG # Begin signature block   new-line-character

signature:
    base64 encoded signature blob in multiple single-line-comments

signature-end:
    new-line-character   # SIG # End signature block   new-line-character

Deskripsi:

Aliran sumber input ke penerjemah PowerShell adalah input dalam skrip, yang berisi urutan karakter Unicode. Pemrosesan leksikal dari aliran ini melibatkan pengurangan karakter-karakter tersebut menjadi urutan token, yang kemudian menjadi masukan analisis sintaksis.

Skrip adalah sekelompok perintah PowerShell yang disimpan dalam file skrip. Skrip itu sendiri sebenarnya tidak memiliki nama dan mengambil namanya dari file sumbernya. Akhir file tersebut menunjukkan akhir skrip.

Skrip dapat secara opsional berisi tanda tangan digital. Lingkungan host tidak diperlukan untuk memproses teks apa pun yang mengikuti tanda tangan atau apa pun yang terlihat seperti tanda tangan. Pembuatan dan penggunaan tanda tangan digital tidak tercakup dalam spesifikasi ini.

Pemisah baris

Sintaksis:

new-line-character:
    Carriage return character (U+000D)
    Line feed character (U+000A)
    Carriage return character (U+000D) followed by line feed character (U+000A)

new-lines:
    new-line-character
    new-lines new-line-character

Deskripsi:

Kehadiran karakter baris baru dalam aliran sumber input membaginya menjadi baris yang dapat digunakan untuk hal-halseperti pelaporan kesalahan dan deteksi akhir komentar baris tunggal.

Penghenti baris dapat diperlakukan sebagai spasi putih (§2.2.4).

2.2.3 Komentar

Sintaksis:

comment:
    single-line-comment
    requires-comment
    delimited-comment

single-line-comment:
    # input-characters~opt~

input-characters:
    input-character
    input-characters input-character

input-character:
    Any Unicode character except a new-line-character

requires-comment:
    #Requires whitespace command-arguments

dash:
    - (U+002D)
    EnDash character (U+2013)
    EmDash character (U+2014)
    Horizontal bar character (U+2015)

dashdash:
    dash dash

delimited-comment:
    < # delimited-comment-text~opt~ hashes >

delimited-comment-text:
    delimited-comment-section
    delimited-comment-text delimited-comment-section

delimited-comment-section:
    >
    hashes~opt~  not-greater-than-or-hash

hashes:
    #
    hashes #

not-greater-than-or-hash:
    Any Unicode character except > or #

Deskripsi:

Kode sumber dapat diannotasi dengan penggunaan komentar.

Komentar satu baris dimulai dengan karakter # dan diakhir dengan karakter baris baru.

Komentar dibatasi dimulai dengan pasangan karakter <# dan diakhiri dengan pasangan karakter #>. Ini dapat terjadi sebagai bagian dari baris sumber, sebagai seluruh baris sumber, atau dapat menjangkau sejumlah baris sumber.

Komentar diperlakukan sebagai spasi kosong.

Produksi di atas menyiratkan bahwa

  • Komentar tidak bersarang.
  • Urutan karakter <# dan #> tidak memiliki arti khusus dalam komentar satu baris.
  • Karakter # tidak memiliki arti khusus dalam komentar yang dibatasi.

Tata bahasa leksikal menyiratkan bahwa komentar tidak dapat terjadi di dalam token.

(Lihat §A untuk informasi tentang membuat file skrip yang berisi komentar bernilai khusus yang digunakan untuk menghasilkan dokumentasi dari file skrip.)

Requires-comment menentukan kriteria yang harus dipenuhi agar skrip yang berisinya diizinkan untuk dijalankan. Kriteria utama adalah versi PowerShell yang digunakan untuk menjalankan skrip. Persyaratan versi minimum ditentukan sebagai berikut:

#Requires -Version N[.n]

Di mana N adalah versi utama (wajib) dan n adalah versi minor (opsional).

Komentar yang diperlukan dapat ada dalam file skrip apa pun; namun, tidak dapat ada di dalam fungsi atau cmdlet. Ini harus menjadi item pertama pada baris sumber. Skrip dapat berisi beberapa memerlukan komentar.

Urutan karakter hanya dikenali sebagai komentar jika urutan tersebut dimulai dengan # atau <#. Misalnya, hello#there dianggap sebagai satu token tunggal sedangkan hello #there dianggap sebagai token hello yang diikuti dengan komentar satu baris. Selain mengikuti spasi kosong, urutan awal komentar juga dapat didahului oleh karakter penghentian ekspresi atau penghentian pernyataan (seperti ), , }], ', ", atau ;).

Komentar yang diperlukan tidak dapat ada di dalam snap-in.

Ada empat bentuk lain dari wajib komentar:

#Requires -Assembly AssemblyId
#Requires -Module ModuleName
#Requires -PSSnapin PSSnapin [ -Version *N* [.n] ]
#Requires -ShellId ShellId

2.2.4 Spasi kosong

Sintaksis:

whitespace:
    Any character with Unicode class Zs, Zl, or Zp
    Horizontal tab character (U+0009)
    Vertical tab character (U+000B)
    Form feed character (U+000C)
    ` (The backtick character U+0060) followed by new-line-character

Deskripsi:

Spasi kosong terdiri dari urutan apa pun dari satu atau beberapa karakter spasi kosong .

Kecuali untuk fakta bahwa spasi kosong dapat bertindak sebagai pemisah untuk token, itu diabaikan.

Tidak seperti beberapa bahasa populer, PowerShell tidak menganggap karakter terminator baris (§2.2.2) sebagai spasi kosong. Namun, pemutus baris dapat diperlakukan sebagai ruang kosong dengan mendahului karakter backtick, ` (U+0060). Ini diperlukan ketika konten baris selesai secara sintetis, namun baris berikut berisi token yang dimaksudkan untuk dikaitkan dengan baris sebelumnya. Contohnya,

$number = 10 # assigns 10 to $number; nothing is written to the pipeline
+ 20 # writes 20 to the pipeline
- 50 # writes -50 to the pipeline
$number # writes $number's value, 10, to the pipeline

Dalam contoh ini, tanda backtick menandakan garis sumber dilanjutkan. Ekspresi berikut setara dengan $number = 10 + 20 - 50.

$number = 10 `
+ 20 `
- 50
$number # writes $number's value to the pipeline
-20

2.3 Token

Sintaksis:

token:
    keyword
    variable
    command
    command-parameter
    command-argument-token
    integer-literal
    real-literal
    string-literal
    type-literal
    operator-or-punctuator

Deskripsi:

Token adalah elemen leksikal terkecil dalam bahasa PowerShell.

Token dapat dipisahkan oleh baris baru, komentar, spasi kosong, atau kombinasinya.

2.3.1 Kata Kunci

Sintaksis:

keyword: one of
    begin          break          catch       class
    continue       data           define      do
    dynamicparam   else           elseif      end
    exit           filter         finally     for
    foreach        from           function    if
    in             inlinescript   parallel    param
    process        return         switch      throw
    trap           try            until       using
    var            while          workflow

Deskripsi:

Kata kunci adalah urutan karakter yang memiliki arti khusus saat digunakan di tempat yang bergantung pada konteks. Paling sering, ini adalah sebagai token pertama dalam pernyataan; namun, ada lokasi lain, seperti yang ditunjukkan oleh tata bahasa. (Token yang terlihat seperti kata kunci, tetapi tidak digunakan dalam konteks kata kunci, adalah nama perintah atau argumen perintah.)

Kata kunci class, define, from, using, dan var dicadangkan untuk digunakan di masa mendatang.

Nota

Catatan Editor: Kata kunci class dan using diperkenalkan di PowerShell 5.0. Lihat about_Classes dan about_Using.

2.3.2 Variabel

Sintaksis:

variable:
    $$
    $?
    $^
    $   variable-scope~opt~  variable-characters
    @   variable-scope~opt~  variable-characters
    braced-variable


braced-variable:
    ${   variable-scope~opt~   braced-variable-characters   }

variable-scope:
    Global:
    Local:
    Private:
    Script:
    Using:
    Workflow:
    variable-namespace

variable-namespace:
    variable-characters   :

variable-characters:
    variable-character
    variable-characters   variable-character

variable-character:
    A Unicode character of classes Lu, Ll, Lt, Lm, Lo, or Nd
    _   (The underscore character U+005F)
    ?

braced-variable-characters:
    braced-variable-character
    braced-variable-characters   braced-variable-character

braced-variable-character:
    Any Unicode character except
        }   (The closing curly brace character U+007D)
        `   (The backtick character U+0060)
    escaped-character

escaped-character:
    `   (The backtick character U+0060) followed by any Unicode character

Deskripsi:

Variabel dibahas secara rinci dalam (§5). Variabel $? dibahas dalam §2.3.2.2. Cakupan dibahas dalam §3.5.

Variabel $$ dan $^ dicadangkan untuk digunakan di lingkungan interaktif, yang berada di luar cakupan spesifikasi ini.

Ada dua cara menulis nama variabel: nama variabel berkurung kurawal, yang dimulai dengan $, diikuti dengan sekumpulan karakter yang dibatasi oleh kurung kurawal dari satu atau beberapa karakter yang hampir sewenang-wenang; dan nama variabel biasa, yang juga dimulai dengan $, diikuti oleh satu atau beberapa karakter dari kumpulan karakter yang lebih terbatas dibandingkan dengan yang diizinkan oleh nama variabel berkurung kurawal. Setiap nama variabel biasa dapat diekspresikan menggunakan nama variabel diberi kurung yang sesuai.

$totalCost
$Maximum_Count_26

$végösszeg # Hungarian
$итог # Russian
$総計 # Japanese (Kanji)

${Maximum_Count_26}
${Name with`twhite space and `{punctuation`}}
${E:\\File.txt}

Tidak ada batasan panjang nama variabel, semua karakter dalam nama variabel signifikan, dan huruf tidak berbeda.

Ada beberapa jenis variabel yang berbeda: ditentukan pengguna (§2.3.2.1), otomatis (§2.3.2.2), dan preferensi (§2.3.2.3). Semuanya dapat berdampingan dalam cakupan yang sama (§3,5).

Pertimbangkan definisi fungsi dan panggilan berikut:

function Get-Power ([long]$Base, [int]$Exponent) { ... }

Get-Power 5 3 # $Base is 5, $Exponent is 3
Get-Power -Exponent 3 -Base 5 # " " "

Setiap argumen diteruskan berdasarkan posisi atau nama, satu per satu. Namun, sekumpulan argumen dapat diteruskan sebagai grup dengan ekspansi ke dalam argumen individual yang ditangani oleh lingkungan runtime. Ekspansi argumen otomatis ini dikenal sebagai splatting. Contohnya,

$values = 5,3 # put arguments into an array
Get-Power @values

$hash = @{ Exponent = 3; Base = 5 } # put arguments into a Hashtable
Get-Power @hash

function Get-Power2 { Get-Power @args } # arguments are in an array

Get-Power2 -Exponent 3 -Base 5 # named arguments splatted named in
@args
Get-Power2 5 3 # position arguments splatted positionally in @args

Ini dicapai dengan menggunakan @ alih-alih $ sebagai karakter pertama variabel yang diteruskan. Notasi ini hanya dapat digunakan dalam argumen ke perintah.

Nama dipartisi ke dalam berbagai namespace yang masing-masing disimpan pada drive virtual (§3.1). Misalnya, variabel disimpan pada Variable:, variabel lingkungan disimpan pada Env:, fungsi disimpan di Function:, dan alias disimpan di Alias:. Semua nama ini dapat diakses sebagai variabel menggunakan produksi namespace variabel dalam cakupan variabel. Contohnya,

function F { "Hello from F" }
$Function:F # invokes function F

Set-Alias A F
$Alias:A # invokes function F via A

$Count = 10
$Variable:Count # accesses variable Count
$Env:PATH # accesses environment variable PATH

Setiap penggunaan nama variabel dengan namespace eksplisit Variable: setara dengan penggunaan nama variabel yang sama tanpa kualifikasi tersebut. Misalnya, $v dan $Variable:v dapat dipertukarkan.

Selain didefinisikan dalam bahasa, variabel juga dapat didefinisikan oleh cmdlet New-Variable.

2.3.2.1 Variabel yang ditentukan pengguna

Nama variabel apa pun yang diizinkan oleh tata bahasa tetapi tidak digunakan oleh variabel otomatis atau preferensi tersedia untuk variabel yang ditentukan pengguna.

Variabel yang ditentukan pengguna dibuat dan dikelola oleh skrip yang ditentukan pengguna.

2.3.2.2 Variabel otomatis

Variabel otomatis menyimpan informasi status tentang lingkungan PowerShell. Nilainya dapat dibaca dalam skrip yang ditulis pengguna tetapi tidak ditulis.

Nota

Tabel yang awalnya ditemukan dalam dokumen ini dihapus untuk mengurangi duplikasi. Untuk daftar lengkap variabel otomatis, lihat about_Automatic_Variables.

2.3.2.3 Variabel preferensi

Variabel preferensi menyimpan preferensi pengguna untuk sesi tersebut. Mereka dibuat dan diinisialisasi oleh lingkungan runtime PowerShell. Nilainya dapat dibaca dan ditulis dalam skrip yang ditulis pengguna.

Nota

Tabel yang awalnya ditemukan dalam dokumen ini dihapus untuk mengurangi duplikasi. Untuk daftar lengkap variabel preferensi, lihat about_Preference_Variables.

2.3.3 Perintah

Sintaksis:

generic-token:
    generic-token-parts

generic-token-parts:
    generic-token-part
    generic-token-parts generic-token-part

generic-token-part:
    expandable-string-literal
    verbatim-here-string-literal
    variable
    generic-token-char

generic-token-char:
    Any Unicode character except
        {   }   (   )   ;   ,   |   &   $
        ` (The backtick character U+0060)
        double-quote-character
        single-quote-character
        whitespace
        new-line-character
        escaped-character

generic-token-with-subexpr-start:
    generic-token-parts $(

2.3.4 Parameter

Sintaksis:

command-parameter:
    dash first-parameter-char parameter-chars colon~opt~

first-parameter-char:
    A Unicode character of classes Lu, Ll, Lt, Lm, or Lo
    _ (The underscore character U+005F)
    ?

parameter-chars:
    parameter-char
    parameter-chars parameter-char

parameter-char:
    Any Unicode character except
        { } ( ) ; , \| & . [
        colon
        whitespace
        new-line-character

colon:
    : (The colon character U+003A)

verbatim-command-argument-chars:
    verbatim-command-argument-part
    verbatim-command-argument-chars verbatim-command-argument-part

verbatim-command-argument-part:
    verbatim-command-string
    & non-ampersand-character
    Any Unicode character except
        |
        new-line-character

non-ampersand-character:
    Any Unicode character except &

verbatim-command-string:
    double-quote-character non-double-quote-chars
    double-quote-character

non-double-quote-chars:
    non-double-quote-char
    non-double-quote-chars non-double-quote-char

non-double-quote-char:
    Any Unicode character except
        double-quote-character

Deskripsi:

Saat perintah dipanggil, informasi dapat diteruskan melalui satu atau beberapa argumen yang nilainya diakses dari dalam perintah melalui sekumpulan parameter yang sesuai. Proses pencocokan parameter ke argumen disebut pengikatan parameter.

Ada tiga jenis argumen:

  • [switch] parameter (§8.10.5) -- Ini memiliki parameter perintah formulir di mana first-parameter-char dan parameter-chars bersama-sama membentuk nama sakelar, yang sesuai dengan nama parameter (tanpa leading-nya -) dalam perintah yang dipanggil. Jika titik dua berikutnya dihilangkan, kehadiran argumen ini menunjukkan bahwa parameter yang sesuai diatur ke $true. Jika titik dua di akhir ada, argumen yang segera mengikuti harus menetapkan nilai dengan jenis bool, dan parameter yang sesuai diatur ke nilai tersebut. Misalnya, pemanggilan berikut setara:

    Set-MyProcess -Strict
    Set-MyProcess -Strict: $true
    
  • Parameter dengan argumen (§8.10.2) -- Ini memiliki bentuk parameter perintah di mana first-parameter-char dan parameter-chars bersama-sama membentuk nama parameter, yang sesuai dengan nama parameter (tanpa tanda awal "-") dalam perintah yang dipanggil. Tidak boleh ada titik dua di akhir. Argumen yang langsung mengikuti menentukan nilai terkait. Misalnya, diberikan perintah Get-Power, yang memiliki parameter $Base dan $Exponent, pemanggilan berikut setara:

    Get-Power -Base 5 -Exponent 3
    Get-Power -Exponent 3 -Base 5
    
  • Argumen posisi (§8.10.2) - Argumen dan parameter terkait di dalam perintah memiliki posisi dengan yang pertama memiliki posisi nol. Argumen dalam posisi 0 terikat ke parameter di posisi 0; argumen dalam posisi 1 terikat ke parameter di posisi 1; dan sebagainya. Misalnya, diberikan perintah Get-Power, yang memiliki parameter $Base dan $Exponent di posisi 0 dan 1, masing-masing, berikut memanggil perintah tersebut:

    Get-Power 5 3
    

Lihat §8.2 untuk detail parameter -- khusus dan --%.

Ketika perintah dipanggil, nama parameter dapat disingkat; setiap bagian terdepan yang berbeda dari nama lengkap dapat digunakan, asalkan tidak ambigu sehubungan dengan nama parameter lain yang diterima oleh perintah yang sama.

Untuk informasi tentang pengikatan parameter, lihat §8,14.

2.3.5 Literal

Sintaksis:

literal:
    integer-literal
    real-literal
    string-literal

2.3.5.1 Literal numerik

Ada dua jenis literal numerik: bilangan bulat (§2.3.5.1.1) dan nyata (§2.3.5.1.2). Keduanya dapat memiliki akhiran pengali (§2.3.5.1.3).

2.3.5.1.1 Literal bilangan bulat

Sintaksis:

integer-literal:
    decimal-integer-literal
    hexadecimal-integer-literal

decimal-integer-literal:
    decimal-digits numeric-type-suffix~opt~ numeric-multiplier~opt~

decimal-digits:
    decimal-digit
    decimal-digit decimal-digits

decimal-digit: one of
    0  1  2  3  4  5  6  7  8  9

numeric-type-suffix:
    long-type-suffix
    decimal-type-suffix

hexadecimal-integer-literal:
    0x hexadecimal-digits long-type-suffix~opt~
    numeric-multiplier~opt~

hexadecimal-digits:
    hexadecimal-digit
    hexadecimal-digit hexadecimal-digits

hexadecimal-digit: one of
    0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f

long-type-suffix:
    l

numeric-multiplier: one of
    kb mb gb tb pb

Deskripsi:

Jenis literal bilangan bulat ditentukan oleh nilainya, ada atau tidak adanya akhiran tipe panjang, dan adanya pengali numerik (§2.3.5.1.3).

Untuk bilangan bulat literal tanpa akhiran tipe panjang

  • Jika nilainya dapat diwakili oleh jenis int (§4.2.3), itu adalah jenisnya;
  • Jika tidak, jika nilainya dapat diwakili oleh tipe long (§4.2.3), maka itu adalah tipenya.
  • Jika tidak, jika nilainya dapat diwakili oleh jenis desimal (§2.3.5.1.2), itu adalah jenisnya.
  • Jika tidak, itu diwakili oleh tipe double (§2.3.5.1.2).

Untuk bilangan bulat literal dengan akhiran tipe panjang

  • Jika nilainya dapat diwakili oleh panjang jenis (§4.2.3), itu adalah jenisnya;
  • Jika tidak, literal itu terbentuk dengan buruk.

Dalam representasi two's complement untuk nilai bilangan bulat, ada satu nilai negatif lebih banyak daripada nilai positif. Untuk jenis int, nilai tambahan tersebut adalah -2147483648. Untuk jenis panjang, nilai tambahan tersebut adalah -9223372036854775808. Meskipun token 2147483648 biasanya akan diperlakukan sebagai nilai literal tipe long, jika segera didahului oleh operator unary -, operator dan literal tersebut diperlakukan sebagai nilai literal tipe int yang memiliki nilai terkecil. Demikian pula, meskipun token 9223372036854775808 biasanya akan diperlakukan sebagai literal angka nyata dari tipe desimal, jika segera didahului oleh operator unari -, operator dan literal tersebut diperlakukan sebagai literal tipe long yang memiliki nilai terkecil.

Beberapa contoh literal bilangan bulat adalah 123 (int), 123L (panjang), dan 2000000000000 (panjang).

Tidak ada yang namanya bilangan bulat literal jenis byte.

2.3.5.1.2 Literal nyata

Sintaksis:

real-literal:
    decimal-digits . decimal-digits exponent-part~opt~ decimal-type-suffix~opt~ numeric-multiplier~opt~
    . decimal-digits exponent-part~opt~ decimal-type-suffix~opt~ numeric-multiplier~opt~
    decimal-digits exponent-part decimal-type-suffix~opt~ numeric-multiplier~opt~

exponent-part:
    e sign~opt~  decimal-digits

sign: one of
    +
    dash

decimal-type-suffix:
    d
    l

numeric-multiplier: one of
    kb mb gb tb pb

dash:
    - (U+002D)
    EnDash character (U+2013)
    EmDash character (U+2014)
    Horizontal bar character (U+2015)

Deskripsi:

Sebuah literal real dapat mengandung pengali numerik (§2.3.5.1.3).

Ada dua jenis literal nyata: double dan desimal. Ini ditunjukkan oleh ketidakhadiran atau kehadiran, masing-masing, dari akhiran jenis desimal. (Tidak ada yang namanya float real literal.)

Literal nyata ganda memiliki jenis ganda (§4.2.4.1). Literal desimal riil memiliki tipe desimal (§4.2.4.2). Nol-nol yang mengikuti di bagian pecahan dari literal desimal nyata adalah signifikan.

Jika nilai bagian eksponen dari digit desimal dalam literal bilangan real ganda kurang dari minimum yang didukung, maka nilai dari literal bilangan real ganda tersebut adalah 0. Jika nilai bagian eksponendigit desimal dalam literal nyata desimal kurang dari minimum yang didukung, maka literal tersebut salah bentuknya. Jika nilai bagian eksponen berupa digit desimal dalam literal ganda atau desimal melebihi dukungan maksimum, maka literal tersebut tidak valid.

Beberapa contoh literal nyata ganda adalah 1., 1.23, .45e35, 32.e+12, dan 123.456E-231.

Beberapa contoh literal nyata desimal adalah 1d (yang memiliki skala 0), 1,20d (yang memiliki skala 2), 1,23450e1d (yaitu, 12,3450, yang memiliki skala 4), 1,2345e3d (yaitu, 1234.5, yang memiliki skala 1), 1,2345e-1d (yaitu, 0,12345, yang memiliki skala 5), dan 1,2345e-3d (yaitu, 0,0012345, yang memiliki skala 7).

Nota

Karena literal nyata ganda tidak perlu memiliki bagian pecahan atau eksponen, tanda kurung pengelompokan dalam (123). M diperlukan untuk memastikan bahwa properti atau metode M sedang dipilih untuk objek bilangan bulat yang nilainya adalah 123. Tanpa tanda kurung tersebut, literal yang sebenarnya tidak akan terbentuk dengan benar.

Nota

Meskipun PowerShell tidak menyediakan literal untuk infinitas dan NaN, ekuivalen seperti literal nyata ganda dapat diperoleh dari properti baca-saja statis PositiveInfinity, NegativeInfinity, dan NaN dari jenis float dan double (§4.2.4.1).

Tata bahasa memungkinkan apa yang dimulai sebagai literal angka ganda dapat memiliki akhiran jenis l atau L. Token seperti itu benar-benar bilangan bulat harfiah yang nilainya diwakili oleh jenis panjang.

Nota

Fitur ini telah dipertahankan untuk kompatibilitas mundur dengan versi PowerShell yang lebih lama. Namun, para programmer tidak dianjurkan untuk menggunakan literal bilangan bulat dalam bentuk ini karena bentuk ini dapat dengan mudah membuat nilai literal menjadi tidak jelas. Misalnya, 1,2L memiliki nilai 1, 1,2345e1L memiliki nilai 12, dan 1,2345e-5L memiliki nilai 0, tidak satu pun yang segera jelas.

2.3.5.1.3 Akhiran pengali

Sintaksis:

numeric-multiplier: *one of*
    kb mb gb tb pb

Deskripsi:

Untuk kenyamanan, bilangan bulat dan real dapat berisi pengali numerik, yang menunjukkan salah satu dari sekumpulan pangkat 10 yang umum digunakan. pengali numerik dapat ditulis dalam kombinasi huruf besar atau kecil apa pun.

Pengali Arti Contoh
Kb kilobyte (1024) 1kb ≡ 1024
mb megabyte (1024 x 1024) 1,30Dmb ≡ 1.363.148,80
Gb gigabyte (1024 x 1024 x 1024) ≡ 17179869184 0x10Gb
Tb terabyte (1024 x 1024 x 1024 x 1024) 1.4e23tb ≡ 1.5393162788864E+35
Pb petabyte (1024 x 1024 x 1024 x 1024 x 1024) 0x12Lpb ≡ 20266198323167232

2.3.5.2 String literal

Sintaksis:

string-literal:
    expandable-string-literal
    expandable-here-string-literal
    verbatim-string-literal
    verbatim-here-string-literal

expandable-string-literal:
    double-quote-character expandable-string-characters~opt~  dollars~opt~ double-quote-character

double-quote-character:
    " (U+0022)
    Left double quotation mark (U+201C)
    Right double quotation mark (U+201D)
    Double low-9 quotation mark (U+201E)

expandable-string-characters:
      expandable-string-part
      expandable-string-characters
      expandable-string-part

expandable-string-part:
    Any Unicode character except
        $
        double-quote-character
        ` (The backtick character U+0060)
    braced-variable
    $ Any Unicode character except
        (
        {
        double-quote-character
        ` (The backtick character U+0060)*
    $ escaped-character
    escaped-character
    double-quote-character double-quote-character

dollars:
    $
    dollars $

expandable-here-string-literal:
    @  double-quote-character  whitespace~opt~  new-line-character
        expandable-here-string-characters~opt~  new-line-character  double-quote-character  @

expandable-here-string-characters:
    expandable-here-string-part
    expandable-here-string-characters  expandable-here-string-part

expandable-here-string-part:
    Any Unicode character except
        $
        new-line-character
    braced-variable
    $ Any Unicode character except
        (
        new-line-character
    $ new-line-character  Any Unicode character except double-quote-char
    $ new-line-character double-quote-char  Any Unicode character except @
    new-line-character  Any Unicode character except double-quote-char
    new-line-character double-quote-char  Any Unicode character except @

expandable-string-with-subexpr-start:
    double-quote-character  expandable-string-chars~opt~  $(

expandable-string-with-subexpr-end:
    double-quote-char

expandable-here-string-with-subexpr-start:
    @  double-quote-character  whitespace~opt~  new-line-character  expandable-here-string-chars~opt~  $(

expandable-here-string-with-subexpr-end:
    new-line-character  double-quote-character  @

verbatim-string-literal:
    single-quote-character verbatim-string-characters~opt~ single-quote-char

single-quote-character:
    ' (U+0027)
    Left single quotation mark (U+2018)
    Right single quotation mark (U+2019)
    Single low-9 quotation mark (U+201A)
    Single high-reversed-9 quotation mark (U+201B)

verbatim-string-characters:
    verbatim-string-part
    verbatim-string-characters verbatim-string-part

verbatim-string-part:
    *Any Unicode character except* single-quote-character
    single-quote-character  single-quote-character

verbatim-here-string-literal:
    @ single-quote-character whitespace~opt~  new-line-character
        verbatim-here-string-characters~opt~  new-line-character
            single-quote-character *@*

verbatim-*here-string-characters:
    verbatim-here-string-part
    verbatim-here-string-characters  verbatim-here-string-part

verbatim-here-string-part:
    Any Unicode character except* new-line-character
    new-line-character  Any Unicode character except single-quote-character
    new-line-character  single-quote-character  Any Unicode character except @

Deskripsi:

Ada empat jenis literal string:

  • verbatim-string-literal (kutipan tunggal satu baris), adalah rangkaian karakter yang terdiri dari nol atau lebih karakter yang diapit oleh sepasang karakter tanda kutip tunggal. Contohnya adalah '' dan 'merah'.

  • expandable-string-literal (single-line double-quoted), yang merupakan urutan karakter nol atau lebih yang dibatasi oleh sepasang karakter tanda kutip ganda. Contohnya adalah "" dan "merah".

  • verbatim-here-string-literal (dikutip tunggal multibaris), yang merupakan urutan nol atau lebih karakter yang dibatasi oleh pasangan karakter @single-quote-character dan single-quote-character@, masing-masing, yang mencakup dua atau lebih baris sumber. Contohnya adalah:

    @'
    '@
    
    @'
    line 1
    '@
    
    @'
    line 1
    line 2
    '@
    
  • expandable-here-string-literal (dikutip ganda multibaris), yang merupakan urutan nol atau lebih karakter yang dibatasi oleh pasangan karakter @karakter tanda kutip ganda dan karakter tanda kutip ganda@, semuanya terletak pada dua atau lebih baris sumber. Contohnya adalah:

    @"
    "@
    
    @"
    line 1
    "@
    
    @"
    line 1
    line 2
    "@
    

Untuk verbatim-here-string-literals dan expandable-here-string-literals, kecuali untuk spasi putih (yang diabaikan) tidak ada karakter yang dapat mengikuti pada baris sumber yang sama dengan pasangan karakter pembatas pembatas pembuka, dan tidak ada karakter yang dapat mendahului pada baris sumber yang sama dengan pasangan karakter pembatas penutup.

Isiverbatim-here-string-literal atau expandable-here-string-literal dimulai pada awal baris sumber pertama setelah pembatas pembuka, dan berakhir di akhir baris sumber terakhir sebelum pembatas penutup. Tubuh mungkin kosong. Terminator garis pada baris sumber terakhir sebelum pemisah penutup bukan bagian dari tubuh harfiah itu.

Literal dari salah satu jenis ini memiliki tipe string (§4.3.1).

Karakter yang digunakan untuk memisahkan verbatim-string-literal atau expandable-string-literal dapat dikandung dalam string harfiah seperti itu dengan menulis karakter itu dua kali, berturut-turut. Misalnya, 'What''s the time?' dan "I said, ""Hello"".". Namun, karakter kutipan tunggal tidak memiliki arti khusus di dalam string-literal yang dapat diperluas, dan karakter kutipan ganda tidak memiliki arti khusus di dalam verbatim-string-literal.

String-literal yang dapat diperluas dan string-literal di sini yang dapat diperluas mungkin berisi karakter yang di-escape (§2.3.7). Misalnya, ketika string literal berikut ditulis ke alur, hasilnya seperti yang ditunjukkan di bawah ini:

"column1`tcolumn2`nsecond line, `"Hello`", ```Q`5`!"
column1<horizontal-tab>column2<new-line>
second line, "Hello", `Q5!

Jika expandable-string-literal atau expandable-here-string-literal berisi nama variabel, kecuali nama tersebut segera didahului oleh karakter escape, itu digantikan oleh representasi string dari nilai variabel tersebut (§6,7). Ini dikenal sebagai substitusi variabel.

Nota

Jika nama variabel adalah bagian dari beberapa ekspresi yang lebih besar, hanya nama variabel yang diganti. Misalnya, jika $a adalah array yang berisi elemen 100 dan 200, ">$a.Length<" menghasilkan >100 200.Length< saat ">$($a.Length)<" menghasilkan >2<. Lihat ekspansi sub-ekspresi di bawah ini.

Misalnya, kode sumber

$count = 10
"The value of `$count is $count"

menghasilkan literal-string-dapat-diekspansi

The value of $count is 10.

Pertimbangkan hal berikut:

$a = "red","blue"
"`$a[0] is $a[0], `$a[0] is $($a[0])" # second [0] is taken literally

Hasilnya adalah

$a[0] is red blue[0], $a[0] is red

expandable-string-literals dan expandable-here-string-literals juga mendukung semacam substitusi yang disebut ekspansi sub-ekspresi, dengan memperlakukan teks formulir $( ... ) sebagai sub-ekspresi (§7.1.6). Teks tersebut digantikan oleh representasi string dari nilai ekspresi tersebut (§6,8). Setiap spasi kosong yang digunakan untuk memisahkan token dalam sub-ekspresidaftar pernyataan diabaikan terkait dengan konstruksi string hasil.

Contohnya,

$count = 10
"$count + 5 is $($count + 5)"
"$count + 5 is `$($count + 5)"
"$count + 5 is `$(`$count + 5)"

menghasilkan string-literal yang dapat diperluas berikut:

10 + 5 is 15
10 + 5 is $(10 + 5)
10 + 5 is $($count + 5)

Sumber berikut,

$i = 5; $j = 10; $k = 15
"`$i, `$j, and `$k have the values $( $i; $j; $k )"

menghasilkan string literal yang dapat diperluas berikut:

$i, $j, and $k have the values 5 10 15

Empat baris ini bisa saja ditulis dengan lebih jelas sebagai berikut:

"`$i, `$j, and `$k have the values $(($i = 5); ($j = 10); ($k = 15))"

Dalam contoh berikut,

"First 10 squares: $(for ($i = 1; $i -le 10; ++$i) { "$i $($i*$i) " })"

yang dihasilkan expandable-string-literal adalah sebagai berikut:

First 10 squares: 1 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64 9 81 10 100

Seperti yang ditunjukkan, sub-ekspresi dapat berisi literal string yang memiliki substitusi variabel dan ekspansi sub-ekspresi. Perhatikan juga bahwa pembatas inner expandable-string-literal tidak perlu diloloskan; fakta bahwa mereka berada di dalam sub-ekspresi berarti mereka tidak dapat menjadi terminator untuk outer expandable-string-literal.

String literal yang dapat diperluas atau here-string literal yang dapat diperluas yang berisi substitusi variabel atau ekspansi sub-ekspresi dievaluasi setiap kali literal digunakan; misalnya

$a = 10
$s1 = "`$a = $($a; ++$a)"
"`$s1 = >$s1<"
$s2 = "`$a = $($a; ++$a)"
"`$s2 = >$s2<"
$s2 = $s1
"`$s2 = >$s2<"

yang menghasilkan string-literal yang dapat diperluas berikut:

$s1 = >$a = 10<
$s2 = >$a = 11<
$s2 = >$a = 10<

Isi verbatim-here-string-literal diambil verbatim, termasuk ruang putih terkemuka atau berikutnya dalam tubuh. Dengan demikian, karakter tanda kutip tunggalyang disematkan tidak perlu dilipatgandakan, dan tidak ada substitusi atau ekspansi. Contohnya,

$lit = @'
That's it!
2 * 3 = $(2*3)
'@

yang menghasilkan arti harfiah

That's it!
2 * 3 = $(2*3)

Isi dari string-literal yang dapat diperluas-di sini tunduk pada substitusi dan ekspansi, tetapi setiap spasi putih terkemuka atau berikutnya dalam isi tetapi di luar sub-ekspresidiambil verbatim, dan karakter kutipan gandayang disematkan tidak perlu digandakan. Contohnya,

$lit = @"
That's it!
2 * 3 = $(2*3)
"@

yang menghasilkan hasil literal berikut ketika diperluas:

That's it!
2 * 3 = 6

Untuk verbatim-here-string-literals dan expandable-here-string-literals, setiap terminator baris dalam isi diwakili dalam literal yang dihasilkan dengan cara yang ditentukan oleh implementasi. Misalnya, di

$lit = @"
abc
xyz
"@

baris kedua tubuh memiliki dua ruang terdepan, dan baris pertama dan kedua tubuh memiliki terminator garis; namun, terminator untuk baris kedua tubuh bukan bagian dari tubuh itu. Literal yang dihasilkan setara dengan: "abc<implementation-defined character sequence>xyz".

Nota

Untuk membantu keterbacaan sumber, literal string panjang dapat dipecah di beberapa baris sumber tanpa terminator garis dimasukkan. Ini dilakukan dengan menulis setiap bagian sebagai literal terpisah dan menggabungkan bagian-bagian dengan operator + (§7.7.2). Operator ini memungkinkan operannya untuk menunjuk salah satu dari empat jenis string literal.

Nota

Meskipun tidak ada yang namanya karakter harfiah per se, efek yang sama dapat dicapai dengan mengakses karakter pertama dalam string 1 karakter, sebagai berikut: [char]"A" atau "A"[0].

Untuk verbatim-here-string-literal dan expandable-here-string-literal, setiap pemisah baris dalam isinya diwakili persis seperti yang diberikan.

2.3.5.3 Literal null

Lihat variabel $null otomatis (§2.3.2.2).

2.3.5.4 Literal Boolean

Lihat variabel $false otomatis dan $true (§2.3.2.2).

2.3.5.5 Literal Array

PowerShell memungkinkan ekspresi jenis array (§9) ditulis menggunakan operator koma unary (§7.2.1), array-expression (§7.1.7), operator koma biner (§7,3), dan operator rentang (§7,4).

2.3.5.6 Literal hash

PowerShell memungkinkan ekspresi jenis Hashtable (§10) ditulis menggunakan hash-literal-expression (§7.1.9)

2.3.5.7 Nama jenis

Sintaksis:

type-name:
    type-identifier
    type-name . type-identifier

type-identifier:
    type-characters

type-characters:
    type-character
    type-characters type-character

type-character:
    A Unicode character of classes Lu, Ll, Lt, Lm, Lo, or Nd
    _ (The underscore character U+005F)

array-type-name:
    type-name [

generic-type-name:
    type-name [

2.3.6 Operator dan tanda baca

Sintaksis:

operator-or-punctuator: one of
    {   }   [   ]   (   )   @(   @{   $(   ;
    &&  ||  &   |   ,   ++  ..   ::   .
    !   *   /   %   +   -   --
    -and   -band   -bnot   -bor
    -bxor   -not   -or     -xor
    assignment-operator
    merging-redirection-operator
    file-redirection-operator
    comparison-operator
    format-operator

assignment-operator: one of
    =  -=  +=  *=  /=  %=

file-redirection-operator: one of
    >  >>  2>  2>>  3>  3>>  4>  4>>
    5>  5>>  6>  6>>  *>  *>>  <

merging-redirection-operator: one of
    *>&1  2>&1  3>&1  4>&1  5>&1  6>&1
    *>&2  1>&2  3>&2  4>&2  5>&2  6>&2

comparison-operator: *one of
    -as           -ccontains      -ceq
    -cge          -cgt            -cle
    -clike        -clt            -cmatch
    -cne          -cnotcontains   -cnotlike
    -cnotmatch    -contains       -creplace
    -csplit       -eq             -ge
    -gt           -icontains      -ieq
    -ige          -igt            -ile
    -ilike        -ilt            -imatch
    -in           -ine            -inotcontains
    -inotlike     -inotmatch      -ireplace
    -is           -isnot          -isplit
    -join         -le             -like
    -lt           -match          -ne
    -notcontains  -notin         -notlike
    -notmatch     -replace       -shl*
    -shr          -split

format-operator:
    -f

Deskripsi:

&& dan || dicadangkan untuk digunakan di masa mendatang.

Nota

Catatan Editor: Operator && rantai alur dan || diperkenalkan di PowerShell 7. Lihat about_Pipeline_Chain_Operators.

Nama berikut tanda hubung dalam operator dicadangkan untuk tujuan tersebut hanya dalam konteks operator.

Operator yang dimulai dengan tanda hubung tidak boleh memiliki spasi kosong antara tanda hubung tersebut dan token yang mengikutinya.

2.3.7 Karakter yang lolos

Sintaksis:

escaped-character:
    ` (The backtick character U+0060) followed by any Unicode character

Deskripsi:

Karakter escape adalah cara untuk menetapkan interpretasi khusus ke karakter dengan memberinya awalan karakter Backtick (U+0060). Tabel berikut ini memperlihatkan arti setiap karakter yang diloloskan:

Karakter yang Lolos Makna
`a Pemberitahuan (U+0007)
`b Backspace (U+0008)
`f Umpan formulir (U+000C)
`n Garis baru (U+000A)
`r Pengembalian pengangkutan (U+000D)
`t Tab Horizontal (U+0009)
`v Tab vertikal (U+0009)
`' Kutipan tunggal (U+0027)
`" Kutipan ganda (U+0022)
`` Backtick (U+0060)
`0 NUL (U+0000)
`x Jika x adalah karakter selain karakter yang ditunjukkan di atas, karakter backtick diabaikan dan x diambil secara harfiah.

Implikasi dari entri akhir dalam tabel di atas adalah bahwa spasi yang sebaliknya akan memisahkan token dapat dijadikan bagian dari token sebagai gantinya. Misalnya, nama file yang berisi spasi dapat ditulis sebagai Test` Data.txt (serta 'Test Data.txt' atau "Test Data.txt").