GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana Cara Mengatur Parameter Opsional??

Tutup . Pertanyaan ini berbasis opini. Saat ini tidak menerima jawaban.

Ingin memperbaiki pertanyaan ini? Perbarui pertanyaan sehingga dapat dijawab dengan fakta dan kutipan dengan mengedit posting ini.

Ditutup 7 tahun yang lalu.


Perbaiki pertanyaan ini

Misalkan Anda memiliki masalah berikut:

Bergantung pada apakah skrip dijalankan dalam pipa atau tidak, Anda ingin menambahkan -print0 parameter untuk find .

Saya dapat memikirkan setidaknya dua cara untuk melakukan ini:

[[ -p '/dev/stdin' ]] && local null_terminated='-print0'
find -mindepth 1 -maxdepth 1 ! ( "${args[@]}" ) "$null_terminated"

Atau

    if [[ -p '/dev/stdin' ]]; then
        find -mindepth 1 -maxdepth 1 ! ( "${args[@]}" ) -print0
    else
        find -mindepth 1 -maxdepth 1 ! ( "${args[@]}" )
    fi

Apakah ada cara yang lebih baik untuk melakukan ini? Pertanyaannya adalah untuk bash , tetapi solusi untuk shell lain atau sh portabel/standar solusi akan diterima juga.

Jawaban yang Diterima:

Yang pertama tidak akan berfungsi seolah-olah $null_terminated kosong atau tidak disetel, find akan mengeluh tentang argumen ekstra kosong itu.

find -mindepth 1 -maxdepth 1 ! ( "${args[@]}" ) $null_terminated

Akan bekerja tetapi hanya jika $null_terminated tidak mengandung karakter pengganti atau karakter dari IFS.

Melakukannya:

if [[ -p '/dev/stdin' ]]; then
  extra_args=(-print0)
else
  extra_args=()
fi

find -mindepth 1 -maxdepth 1 ! ( "${args[@]}" ) "${extra_args[@]}"

tidak akan bermasalah.

Bourne/POSIXly, Anda dapat melakukan:

setel -- temukan . ! -nama . -pangkas! ( "[email protected]" )[ -p /dev/stdin ] &&set -- "[email protected]" -exec printf '%s
Linux
  1. Cara Mengatur Proksi Terbalik Nginx

  2. Bagaimana cara mengatur nick default untuk koneksi irssi baru?

  3. Bagaimana cara menemukan nomor baris di Bash ketika terjadi kesalahan?

  1. Cara menggunakan FIND di Linux

  2. Cara menemukan File di Linux

  3. Bagaimana Cara Mengatur Pelacak Bittornado?

  1. Linux / UNIX :Cara menemukan file yang memiliki set SUID/SGID

  2. Bagaimana saya bisa mendapatkan CMake untuk menemukan instalasi Boost alternatif saya?

  3. Bagaimana cara mengetahui status wlan0?