Suggerimento generale: se hai due livelli di annidamento, evita di utilizzare virgolette singole nel comando interno e usa virgolette singole attorno al comando esterno.
Suggerimento aggiuntivo: non usare i backtick - `…`
- per eseguire il codice, invece usalo $(…)
attorno. Le parentesi in dollari sono praticamente DWIM ('Fai quello che voglio dire') quando si tratta di virgolette nidificate; i backquotes hanno regole arcane e dipendenti dalla shell.
watch -n 3 'for x in $(my_command | grep keyword | cut -d" " -f1); do command2 "rusage[mem=7000]" "$x"; done'
Se sono necessarie virgolette singole all'interno di un comando a virgoletta singola, è possibile utilizzare '\''
. Pensa a questi quattro caratteri come al modo di citare una singola virgoletta all'interno di virgolette singole, sebbene tecnicamente parlando sia costruita come fine della stringa a virgoletta singola, aggiungi una virgoletta singola letterale e inizia una nuova stringa a virgoletta singola (ancora aggiunta al parola corrente).
Per casi più complessi, contare scrupolosamente le virgolette o definire variabili temporanee.
cmd='for x in $(my_command | grep keyword | cut -d" " -f1); do command2 "rusage[mem=7000]" "$x"; done'
watch_cmd='watch -n 3 "$cmd"'
Questa risposta non è specifica per zsh. Zsh non porta nulla di importante qui. È possibile risparmiare un po 'di preventivo perché non è necessario utilizzare virgolette doppie per le sostituzioni di comandi e, a volte, esistono modi per utilizzare i comandi integrati anziché i comandi esterni che riducono le esigenze di quotazione, ma i problemi sottostanti sono gli stessi di altre shell.
Oh, e comunque, nota che watch
eseguirà il tuo comando in sh
, non in zsh. Se si desidera eseguire il comando in zsh, è necessario eseguire
watch -n 3 -x zsh -c "$cmd"
su Debian / Ubuntu e
export cmd
watch -n 3 'exec zsh -c "$cmd"'
(ancora più citando!) altrove.
watch
non viene fornito con le opzioni-x
né-c
sulla mia macchina. L'ho cercato online e non ho trovato nessuna man page che li menzioni. Cosa fanno queste opzioni?