GNU/Linux >> Linux Esercitazione >  >> Linux

È Shell Portable eseguire un comando sulla stessa riga dopo l'assegnazione di variabili?

Esiste uno standard che copre la portabilità dell'esecuzione di un comando dopo l'assegnazione di variabili sulla stessa riga?

APPLE="cider" echo hi

Quanto è portatile una cosa del genere? Dove funzionerà e dove no?

Inoltre:i miei script di shell iniziano con #!/bin/sh se questo fa la differenza.

Risposta accettata:

Finché utilizzi una shell conforme a POSIX, sì.

Dalla definizione POSIX del linguaggio dei comandi della shell:(punti rilevanti in grassetto)

Un "comando semplice" è una sequenza di assegnazioni di variabili opzionali e reindirizzamenti, in qualsiasi sequenza, eventualmente seguiti da parole e reindirizzamenti, terminati da un operatore di controllo.

Quando è necessario eseguire un determinato comando semplice (ovvero, quando qualsiasi costrutto condizionale come un elenco AND-OR o un'istruzione case non ha ignorato il comando semplice), le seguenti espansioni, assegnazioni e reindirizzamenti devono essere tutti eseguiti da dall'inizio del testo del comando alla fine:

  1. Le parole riconosciute come assegnazioni variabili o i reindirizzamenti in base alle regole grammaticali della shell vengono salvati per l'elaborazione nei passaggi 3 e 4.

  2. Le parole che non sono assegnazioni variabili o reindirizzamenti devono essere espanse. Se qualche campo rimane dopo la sua espansione, il primo campo è considerato il nome del comando ei campi rimanenti sono gli argomenti per il comando.

  3. I reindirizzamenti devono essere eseguiti come descritto in Reindirizzamento.

  4. Ogni assegnazione di variabile deve essere espansa per l'espansione della tilde, l'espansione dei parametri, la sostituzione dei comandi, l'espansione aritmetica e la rimozione delle virgolette prima di assegnare il valore.

Nell'elenco precedente, l'ordine delle fasi 3 e 4 può essere invertito per l'elaborazione di speciali utilità integrate; vedi Utilità integrate speciali.

Se non risulta alcun nome di comando, le assegnazioni delle variabili influiranno sull'ambiente di esecuzione corrente. In caso contrario, le assegnazioni delle variabili verranno esportate per l'ambiente di esecuzione del comando e non influiranno sull'ambiente di esecuzione corrente (tranne per gli speciali built-in).

Inoltre, sì #!/bin/sh importa. Dalla definizione POSIX di sh :

L'utilità sh è un interprete del linguaggio dei comandi che eseguirà i comandi letti da una stringa della riga di comando, dallo standard input o da un file specificato. L'applicazione garantisce che i comandi da eseguire siano espressi nella lingua descritta in Shell Command Language .

Quindi in pratica dice che sh deve seguire le regole di cui sopra.

Relazionato:questo componente della shell nera di giunzione del cavo chiamato?

Quindi, finché sei su un sistema operativo conforme a POSIX, sei a posto.


Linux
  1. Come eseguire query MySQL/MariaDB direttamente dalla riga di comando di Linux

  2. Alias ​​della riga di comando nella shell di Linux

  3. Suggerimenti/trucchi per la navigazione della riga di comando di Linux 3 - la variabile d'ambiente CDPATH

  4. Ripeti il ​​testo dopo il comando arricciatura sulla stessa riga?

  5. Come memorizzare il risultato di un comando shell eseguito in una variabile in python?

Esegui la riga di comando di Linux sul tuo iPad

Padroneggia la riga di comando di Linux

Googler:esegui ricerche su Google dalla riga di comando

Come posso eseguire un comando diverso ma con gli stessi argomenti?

Riga di comando per tornare alla GUI dopo Ctrl-Alt-F1?

Come eseguire TeX dall'interfaccia della riga di comando in Linux