Kutipan bersarang dalam subkulit

13

Katakanlah saya harus menggunakan tanda kutip untuk merangkum keluaran subkulit seperti:

DATA="$(cat file.hex | xxd -r)"

Tapi saya perlu membuat sarang seperti ini:

DATA="$(cat file.hex | xxd -r | tr -d \"$(cat trim.txt)\")"

Saya tidak dapat menggunakan tanda kutip tunggal karena itu tidak memperluas variabel yang ada di dalamnya. Melarikan diri dari kutipan tidak berfungsi karena mereka hanya diperlakukan sebagai teks pasif.

Bagaimana saya menangani ini?

Melab
sumber
Kenapa tidak kamu gunakan DATA="$(cat file.hex | xxd -r | tr -d "$(cat trim.txt)")"?
cuonglm

Jawaban:

19

Anda tidak perlu menghindari tanda kutip di dalam subkulit, karena shell saat ini tidak menafsirkannya (sebenarnya tidak mengartikan apa pun dari $(hingga ), sebenarnya), dan subkulit tersebut tidak tahu tentang tanda kutip yang ada di atas.

Mengutip subkulit pada penugasan variabel juga tidak perlu, untuk info lebih lanjut lihat man bash.

Mikhal
sumber
1
Itu tergantung pada apa yang Anda coba lakukan, tetapi itu biasanya praktik terbaik. Lihat github.com/koalaman/shellcheck/wiki/Sc2086
LPCRoy
8

Anda tidak perlu melarikan diri dari kutipan bersarang di dalamnya. Mereka diurai dengan benar, secara mengejutkan!

DATA="$(cat file.hex | xxd -r | tr -d "$(cat trim.txt)")"
wisbucky
sumber