GNU/Linux >> Belajar Linux >  >> Linux

Ekspansi penyangga:jalankan beberapa perintah alih-alih memperluas pada satu baris?

Apakah ini hanya pertanyaan "karena saya ingin tahu", atau apakah ada kasus penggunaan nyata untuk itu? Kita bisa melalui beberapa senam untuk menyelesaikannya:

$ eval echo\ {a,b,c}\;
a
b
c

Tapi saya akan memburu siapa pun yang memasukkan perintah yang membingungkan ini ke dalam skrip sistem kami.

Mengapa tidak mencari kejelasan saja:

$ for X in {a,b,c}; do echo $X; done

Anda bahkan dapat menggunakan seluruh babi dan memasukkan beberapa baris baru dan membuat indentasi sedikit sehingga Anda selalu dapat memahami apa yang Anda coba lakukan.


Berdasarkan jawaban yang dipilih Mark Mann, saya dapat memperoleh lebih lanjut contoh ini, yang berfungsi dengan baik:

$ eval echo\ category_{17,32,33}.properties\{,.bak\}\;
category_17.properties category_17.properties.bak
category_32.properties category_32.properties.bak
category_33.properties category_33.properties.bak

Apa yang ditampilkan, adalah ketika Anda menggunakan beberapa kemunculan ekspansi penjepit dalam satu baris, contoh asli Markus akan mencetak setiap variasi satu per satu. Sebaliknya, saya ingin menggunakan jawabannya untuk memindahkan/mengganti nama banyak file. Untuk memastikan bahwa output cocok dengan format mv biasanya mengharapkan (mv oldfilename newfilename ), saya lolos dari kemunculan kedua ekspansi brace, sehingga tidak akan dievaluasi sampai setelah eval awal perintah telah dijalankan.

Karena output di atas muncul seperti yang diharapkan, saya kemudian dapat menjalankan perintah berikut:

$ eval mv\ category_{17,32,33}.properties\{,.bak\}\;
$ ls
category_17.properties.bak  category_32.properties.bak  category_33.properties.bak

Banyak terima kasih kepada Mark atas jawaban aslinya. Harap pilih jawabannya jika Anda menyukai jawaban yang memungkinkan saya melakukannya :-)


Linux
  1. Dalam Urutan Apa Perintah Pipa Dijalankan?

  2. Ekspansi &Variabel Bash Brace?

  3. Bagaimana Perintah Su -c "..." Ini Tampaknya Melewati Dua Perintah, Bukan Satu?

  1. Menjadwalkan Perintah Dengan Sistem Tidak Aktif?

  2. Kondisi Satu Baris Check In Makefile?

  3. Bagaimana Menjalankan Beberapa Perintah Yang Memiliki &Dalam Satu Baris Perintah?

  1. Tutorial Ekspansi Bash Brace:6 Contoh Ekspresi Ekspansi dalam Kawat Gigi

  2. Bagaimana saya bisa menjalankan skrip baris perintah Perl one liner dengan benar?

  3. Jalankan menggabungkan beberapa perintah Linux dalam satu baris