Saya menggunakan perintah berikut untuk membuat daftar URL yang ingin saya uji:
echo -e localhost:8080/reports/{promos,promo-updates,scandown}/{130,139,142}{,-unburdened,-burdened}{,.pdf,.xls,.xlsx,.csv,.preload}"\n" >> urls.txt
Sayangnya, URL yang ditambahkan ke urls.txt
masing-masing memiliki ruang di depannya (kecuali yang pertama, tentu saja). Saya mengerti mengapa itu terjadi, dan saya sadar saya bisa menghilangkannya dengan menyalurkan sed
ekspresi, tetapi saya ingin tahu apakah ada cara untuk menekannya. (Ini mungkin terlihat konyol dan bertele-tele, tetapi itu tidak berbeda dengan preferensi yang dirasakan banyak orang karena tidak "menyalahgunakan kucing" .)
Saya mencoba kutip ganda untuk menekan pemisahan kata , tetapi itu juga menekan ekspansi brace, jadi itu adalah jalan keluar.
Saya mencoba mengubah IFS menjadi string kosong, tetapi tidak berhasil:
IFS='' echo -e localhost:8080/reports/{promos,promo-updates,scandown}/{130,139,142}{,-unburdened,-burdened}{,.pdf,.xls,.xlsx,.csv,.preload}"\n" >> urls.txt
Juga tidak mengubahnya ke baris baru:
IFS='\n' echo -e localhost:8080/reports/{promos,promo-updates,scandown}/{130,139,142}{,-unburdened,-burdened}{,.pdf,.xls,.xlsx,.csv,.preload}"\n" >> urls.txt
sumber
Jawaban:
Anda bisa menyimpan ekspansi brace dalam sebuah array, lalu mengeluarkannya dengan cara yang Anda pilih:
Kemudian
atau
Contoh gema terlihat aneh karena:
IFS=$'\n' echo "${urls[*]}"
karena variabel akan diperluas sebelum variabel env baru berlakuPerhatikan juga perbedaan kecil dalam indeks array dereferencing yang digunakan:
[@]
dalam contoh printf untuk memperluas array menjadi kata-kata individual[*]
dalam contoh echo untuk memperluas array menjadi satu kata, dengan elemen yang dipisahkan oleh karakter pertama IFSsumber
Gunakan
printf
builtin:sumber
Ini ditandai zsh, jadi saya sarankan zsh builtin
print
:-l
mencetak argumen pada baris yang berbeda.sumber
Masalahnya adalah ekspansi brace menambah ruang, dan gema menambahkan baris baru. Jadi dengan menggunakan prinsip tanggung jawab tunggal, pegang baris baru secara terpisah.
sumber
echo
. Ituecho
yang mencetak argumennya yang dipisahkan oleh spasi.echo
memisahkan argumen dengan spasi dan baris baru dimasukkan tambahan sebelum setiap ruang alih-alih mengganti spasi (yang akan lebih masuk akal). Dari memori,xargs
memiliki masalah yang diketahui sangat mirip dengan yang satu ini (terutama dengan-0
opsi)