From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 11080 invoked by alias); 20 May 2018 14:00:16 -0000 Mailing-List: contact zsh-users-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Users List List-Post: List-Help: List-Unsubscribe: X-Seq: 23397 Received: (qmail 5787 invoked by uid 1010); 20 May 2018 14:00:15 -0000 X-Qmail-Scanner-Diagnostics: from mail-oi0-f48.google.com by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.99.2/21882. spamassassin: 3.4.1. Clear:RC:0(209.85.218.48):SA:0(-2.5/5.0):. Processed in 1.277175 secs); 20 May 2018 14:00:15 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=BAYES_00,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_PASS,T_DKIM_INVALID autolearn=ham autolearn_force=no version=3.4.1 X-Envelope-From: sgniazdowski@gmail.com X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to :content-transfer-encoding; bh=/S9NQiPX+9z58FIKAmkxo922HIBqHOYEArOnx5e/q+E=; b=hOIX6u/7PT1WKcbHRqCT40CiFz8NjNtlGWKCZyQcPgq0bz1T80QJ4AkPfzjTH6aibk oU26iXGpjlusSY5OxQQVjGrJdWJrvQbEAhC2A7CDBE5NHL/eM8QGBDP6ZlCOsSlXmSdr bfJjKkQIUu7X1Z+BuwHIhs0C3bqyt81jKHwmnO+bMtVMBV2LajT8O7S+rxeE7LDjnnvy SDez85smO0M70KjsFzvo4mlytap2XIREwcDaXNX5g/cAgQCBD7BrfvOLV0ITmu+uPFpb ORCJ1PlGCHwWM2zwEKwimb2QjY+Byri1y1n1VguXzu5BtiDX9BksZ23y0hWqU9+GPYTL UMTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to :content-transfer-encoding; bh=/S9NQiPX+9z58FIKAmkxo922HIBqHOYEArOnx5e/q+E=; b=EOXmSvJZSzmaM/VJM7he5UfhAb9Ifw4LykZRJJznvNFvWXiqIHB5DdNlhJxVLws6Ua QxN95CHWWd43Pl9xolhfOV0LNWOTLWpDtCdb9CbY6DrR314G5RaImg/1qOQrJxBb4Za5 ykliVZAasV+bp2WGqne0vjmAfaLIukK/tGDn7vcH/jzgTmQCS0sCzqCQxDp+xdHAg9py F30nZ1eNp9ho0ZbMQYbfhB4gckX76SIwcqUTWL0M6Pi7Z0zu+Hryqz94EHK9yNZtKSZu 4ZP9uGr3OkYTmzKuTpXHcVuK4YW+6II4gjUt0EH8VFqnwDdCrgiw55DPvCcyhqebCzjg 8KGQ== X-Gm-Message-State: ALKqPwdnAAUpgPl0CDGOr6IjKT7NVUAmep/Rz01SwxIHYLQp7v2bb3dL W3osxCdqZgGUc6eOzto22ZXcHSdCT/wW2CQAlke1mQ== X-Google-Smtp-Source: AB8JxZoeYNiaBEI6PDx/qu/F1TklrbK78I4bj+ljesIEXiQ/HGzkX8fxgBDaFowaoZ6tZJQs3K4tucP3cquWZarLquQ= X-Received: by 2002:aca:cf90:: with SMTP id f138-v6mr9129587oig.333.1526824810238; Sun, 20 May 2018 07:00:10 -0700 (PDT) MIME-Version: 1.0 From: Sebastian Gniazdowski Date: Sun, 20 May 2018 15:59:49 +0200 Message-ID: Subject: Fun thing, manual execution of $( ) command substitution To: Zsh Users Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hello, I wrote an ini parser and it allows to put $(...) in the content because of following function. It isn't a rocket science, and doesn't much parse to resolve $( echo "$( )" ) cases, but I think that animating plain-text files is something interesting. Maybe someone has other such tricks up sleeve? The function will replace any $( ... ) in given buffer, with stdout-result of command inside the parentheses, and return new buffer in REPLY. It uses extended glob. Somewhat robust =E2=80=93 handles $(echo \= )). function subst_cmds { local buffer=3D"$1" nul=3D$'\0' local -a cmds cmds=3D( ${(0)${(S)buffer//(#b)*\$\((?#)([^\\]\))/${match[1]}${match[2]= %\)}${nul}}%$nul*} ) [[ "${cmds[1]}" =3D "$buffer" ]] && return 0 integer size=3D"${#cmds}" i local -a outputs for (( i =3D 1; i <=3D size; ++ i )); do outputs[i]=3D"$( ${(z)cmds[i]} )" done i=3D0 REPLY=3D"${(S)buffer//(#b)\$\((?#)([^\\]\))/${outputs[++i]}}" return 0 } --=20 Best regards, Sebastian Gniazdowski