Impostazione di un argomento con bash

Eseguo spesso un semplice comando bash:

rpm -Uvh --define "_transaction_color 3" myPackage.rpm 

che funziona correttamente.

Ma ora sto provando a scriverlo in un file bash e renderlo più flessibile:

 #!/bin/bash INSTALL_CMD=rpm INSTALL_OPT="-Uvh --define '_transaction_color 3'" ${INSTALL_CMD} ${INSTALL_OPT} myPackage.rpm 

Tuttavia, questo continua a generare l’errore:

 error: Macro % has illegal name (%define) 

L’errore viene da come vengono --define e il quotato _transaction_color .
Ho provato una varietà di espressioni di escape diverse, anche facendo di INSTALL_OPT un array, gestito con ${INSTALL_OPT[@]} .

Finora, i miei tentativi non hanno funzionato.
Chiaramente, quello che voglio è estremamente semplice. Non sono sicuro di come realizzarlo.

Come posso convincere bash a gestire correttamente il mio argomento --define ?

Il problema è che le quotazioni non vengono elaborate dopo la sostituzione delle variabili. Quindi sembra che tu stia cercando di definire una macro chiamata '_transaction_color .

Prova ad usare un array:

 INSTALL_OPT=(-Uvh --define '_transaction_color 3') 

poi:

 "$INSTALL_CMD" "${INSTALL_OPT[@]}" myPackage.rpm 

È importante mettere ${INSTALL_OPT[@]} tra virgolette per ottenere il requoting.

Potrebbe essere un problema di fondo con la divisione delle parole nello spazio:

Provare:

 #!/bin/bash IFS=$'\n' INSTALL_CMD=rpm INSTALL_OPT='-Uvh' INSTALL_OPT_DEFINE='--define _transaction_color 3' ${INSTALL_CMD} ${INSTALL_OPT} ${INSTALL_OPT_DEFINE} myPackage.rpm