Условная передача параметров сценарию

Вы не должны пытаться перейти на более старую версию пакета, используя предыдущие версии RPM. Здесь вы пытаетесь перейти на более раннюю версию, используя пакеты CentOS 5 на CentOS 6. Это плохая идея.

У вас есть несколько вариантов.

  1. Получите исходный RPM-файл (SRPM), который использовался для сборки php-5.2.17-1.el5.art.x86_64.rpm и создайте его самостоятельно на CentOS 6, используя:

     $ rpmbuild --rebuild 
  2. Настройте несколько версий PHP, используя следующие инструкции:

  3. Загрузите PHP, скомпилируйте и установите его в каталог, например / opt , затем используйте менеджер пакетов PHP PEAR для установки любых необходимых модулей PHP.

5
30.05.2018, 11:15
3 ответа

La forma más expansible y robusta probablemente sería usar una matriz para contener el parámetro opcional (s):

params=()
if [[ $CONDITION == true ]]; then
    params+=(--param2)
fi
script param1 "${params[@]}"

O abreviado:

[[ $CONDITION == true ]] && params+=(--param2)
script param1 "${params[@]}"

Eso evita repetir la parte constante del comando y puede poner más de un argumento en la matriz, incluso el comando completo.

Tenga en cuenta que es importante hacer esto con una matriz :si reemplaza la matriz con una variable regular(params="--param2"; script param1 $params)tendrá que expandir la variable sin comillas, con todos los problemas que trae, o expandirla entre comillas, en cuyo caso pasará una cadena vacía como argumento si la variable está vacía.

En un caso simple como este, también se puede usar la expansión de "valor alternativo":

cond=x
p2="--param2"
script param1 ${cond:+"$p2"}

Aquí, si condno está vacío (independientemente de si es cond=falseo cond=0en lugar de cond=true), el valor de p2se expande. Esto puede parecer menos feo que las matrices, pero tenga cuidado con la ubicación de las comillas.

Véase también:

31
27.01.2020, 20:32

Una forma versátil de hacer esto es establecer los argumentos en una matriz. La matriz más básica es la lista de parámetros posicionales definidos con set. Puede construir la lista de parámetros en secuencia.

set -- param1
if [[ $CONDITION == "true" ]]; then  
    set -- "$@" --param2  
fi 

command "$@"  

Que podría reducirse a:

set -- param1
[[ $CONDITION == "true" ]] && set -- "$@" --param2
command "$@"  

Si es necesario conservar la lista de parámetros posicionales, entonces:

  • Usar una función:

    callcommand(){     set -- param1
                       [[ $CONDITION == "true" ]] && set -- "$@" --param2
                       command "$@"       
                 }
    callcommand
    
  • O use alguna otra variable de matriz:

    paramArray=()
    paramArray+=(param1)
    [[ $CONDITION == "true" ]] && paramArray+=( "--param2" )
    command "${paramArray[@]}"
    
7
27.01.2020, 20:32
PARAMS+=" param1"
if [[ $CONDITION == "true" ]]; then  
  PARAMS+=" --param2"
fi
script ${PARAMS}
-1
27.01.2020, 20:32

Теги

Похожие вопросы