Dalam Bash versi 4.2.47 (1) - lepaskan ketika saya mencoba untuk menyatukan teks yang diformat yang berasal dari HERE-dokumen seperti:
cat <(fmt --width=10 <<FOOBAR
(I want the surrounding parentheses to be part of the HERE-document)
(Even the preceding unbalanced parenthesis should be part of it.
FOOBAR
) # I want this paranthesis to end the process substitution.
Saya mendapatkan kesalahan berikut:
bash: bad substitution: no closing `)' in <(fmt --width=10 <<FOOBAR
(I want the surrounding parentheses to be part of the HERE-document)
(Even the preceding unbalanced parenthesis should be part of it.
FOOBAR
)
Juga saya tidak ingin mengutip dokumen-SINI, yaitu menulis <'FOOBAR'
, karena saya masih ingin ada variabel yang diganti di dalamnya.
bash
process-substitution
here-document
Tim Friske
sumber
sumber
cat
telepon? Mengapa tidak membiarkannya meneleponfmt
?(Even
dengan"(Even"
itu berfungsi. Itu sama untuk\(Even
. Tampak seperti bug penguraian. Bash masih dalam konteks yang sedang mencari kawat gigi sementara juga dalam konteks membaca dokumen di sini dan kedua konteks saling bertentangan.bash
4.3, kebetulan.Jawaban:
Substitusi proses kira-kira setara dengan ini.
Contoh - mekanisme penggantian proses
Langkah # 1 - buat fifo, hasilkan
Langkah # 2 - baca fifo
Penggunaan parens di dalam HEREDOC juga tampaknya OK:
Contoh - hanya menggunakan FIFO
Langkah # 1 - output ke FIFO
Langkah # 2 - baca konten FIFO
Masalahnya, saya percaya Anda mengalami adalah bahwa proses substitusi,,
<(...)
tampaknya tidak peduli untuk bersarang parens di dalamnya.Contoh - sub proses + HEREDOC tidak berfungsi
Lolos dari orangtua tampaknya menenangkannya, sedikit:
Contoh - melarikan diri orangtua
Tetapi tidak benar-benar memberi Anda apa yang Anda inginkan. Menjadikan parens seimbang juga tampaknya menenangkannya:
Contoh - menyeimbangkan parens
Setiap kali saya memiliki string yang kompleks, seperti ini untuk bersaing di Bash, saya hampir selalu akan membangunnya terlebih dahulu, menyimpannya dalam variabel, dan kemudian menggunakannya melalui variabel, daripada mencoba dan membuat beberapa liner rumit yang akhirnya menjadi rapuh.
Contoh - gunakan variabel
Kemudian untuk mencetaknya:
Referensi
sumber
Ini hanya solusi. Pipa
fmt
untukcat
bukannya menggunakan substitusi prosessumber
bash
penyihir di situs ini. Pengetahuan saya tentang bash parser internal terbatas untuk sedikitnyaIni adalah pertanyaan lama, dan ketika Anda menyadari bahwa ini adalah contoh yang dibuat-buat (dan dengan demikian bahwa solusi yang tepat adalah dengan menggunakan
cat |
atau sebenarnya, tidakcat
sama sekali dalam hal ini), saya hanya akan memposting jawaban saya untuk kasus umum. Saya akan menyelesaikannya dengan meletakkannya di fungsi dan menggunakannya sebagai gantinya.dan kemudian gunakan itu
sumber