GNU/Linux >> Belajar Linux >  >> Linux

Keluar dari kode penugasan variabel ke substitusi perintah di Bash

Perhatikan bahwa hal ini tidak berlaku jika digabungkan dengan local , seperti pada local variable="$(command)" . Formulir itu akan berhasil keluar meskipun command gagal.

Ambil skrip Bash ini misalnya:

#!/bin/bash

function funWithLocalAndAssignmentTogether() {
    local output="$(echo "Doing some stuff.";exit 1)"
    local exitCode=$?
    echo "output: $output"
    echo "exitCode: $exitCode"
}

function funWithLocalAndAssignmentSeparate() {
    local output
    output="$(echo "Doing some stuff.";exit 1)"
    local exitCode=$?
    echo "output: $output"
    echo "exitCode: $exitCode"
}

funWithLocalAndAssignmentTogether
funWithLocalAndAssignmentSeparate

Inilah hasilnya:

[email protected]:~$ ./tmp.sh 
output: Doing some stuff.
exitCode: 0
output: Doing some stuff.
exitCode: 1

Ini karena local sebenarnya adalah perintah bawaan, dan perintah seperti local variable="$(command)" memanggil local setelah mengganti output dari command . Jadi Anda mendapatkan status keluar dari local .


Setelah menjalankan perintah sebagai $(command) memungkinkan output dari perintah untuk menggantikan dirinya sendiri.

Saat Anda mengatakan:

a=$(false)             # false fails; the output of false is stored in the variable a

output yang dihasilkan oleh perintah false disimpan dalam variabel a . Apalagi kode keluarnya sama dengan yang dihasilkan oleh perintah. help false akan memberi tahu:

false: false
    Return an unsuccessful result.

    Exit Status:
    Always fails.

Di sisi lain, mengatakan:

$ false                # Exit code: 1
$ a=""                 # Exit code: 0
$ echo $?              # Prints 0

menyebabkan kode keluar untuk penetapan ke a dikembalikan yaitu 0 .

EDIT:

Mengutip dari manual:

Jika salah satu perluasan berisi substitusi perintah, status keluar dari perintah adalah status keluar dari substitusi perintah yang terakhir dilakukan.

Mengutip dari BASHFAQ/002:

Bagaimana cara menyimpan nilai kembalian dan/atau output dari perintah dalam variabel?

...

output=$(command)

status=$?

Penugasan ke output tidak berpengaruh pada command status keluar, yang masih dalam $? .


Linux
  1. Kode keluar baris perintah bash didemistifikasi

  2. Skrip bash(I)

  3. Perbedaan Antara Operator Bash [[ Vs [ Vs ( Vs ((?

  1. Mengutip Dalam $(Pergantian perintah) Di Bash?

  2. Mengapa Mengatur Variabel Sebelum Perintah Legal Di Bash?

  3. Perintah Rm Dalam Skrip Bash Tidak Bekerja Dengan Variabel?

  1. Bagaimana Bash Mengevaluasi Kode Berikut?

  2. `$?` ? Apakah Itu Variabel?

  3. Apa itu Kode Keluar Bash di Linux