/ / Stringová interpolácia vo vnútri príkazu lisp - funkcionálne programovanie, elisp

Stringová interpolácia vo vnútri lisp - funkčné programovanie, elisp

(insert "[" (shell-command-to-string "~/lombardi/http_fetch.sh") "]")

Ako môžem odovzdať argument funkcii http_fetch.sh. Tento argument sa dosiahne vyhodnotením (elfeed-entry-link entry)

Skúsil som použiť znak „vpredu, ale skončil som s chybou bash.

odpovede:

1 pre odpoveď č. 1

použitie concat pripojiť reťazec, ktorý je výsledkom volania elfeed-entry-link na koniec príkazu shell:

(insert "["
(shell-command-to-string
(concat "~/lombardi/http_fetch.sh " (shell-quote-argument (elfeed-entry-link entry))))
"]")

Na shell-quote-argument chráni príkaz v prípade, že výsledok elfeed-entry-link obsahuje shell metacharnaky alebo medzeru. (ÚPRAVA: odstránená manuálna citácia pôvodne navrhovaná a použitá shell-quote-argument namiesto toho, vďaka komentáru od @phils.)

Všimnite si tiež, že výsledok shell-command-to-string bude s najväčšou pravdepodobnosťou obsahovať posledný nový riadok, takže nezabudnite zbaviť to ak to nechceš.


0 pre odpoveď č. 2

Môžeš použiť format interpolovať reťazce.

(insert "["
(shell-command-to-string
(format "~/lombardi/http_fetch.sh %s" (elfeed-entry-link entry)))
"]")

Ako spomína Steve, mali by ste ho naozaj používať shell-quote-argument aby ste pri odovzdávaní argumentu zaobchádzali s medzerami a úvodzovkami správne.