q='"'; t=( "${@/#/$q}" ); u=( "${t[@]/%/$q}" ); echo ${u[@]}
Bash no admite sustituciones anidadas, así que gracias ahttps://stackoverflow.com/questions/12303974/assign-array-to-variable#12304017por mostrar cómo reasignar una matriz. Consulteman bash
(https://linux.die.net/man/1/bash)para obtener detalles sobre arreglos, expansión y sustitución de patrones (en la expansión de parámetros ).
Bash coloca los parámetros de la línea de comando como una matriz en$@
q
mantiene el carácter de cita.
Las comillas dobles alrededor de la expansión de parámetros ${... }
conservan los parámetros individuales como elementos distintos y envolverlos en ( )
le permite asignarlos como una matriz a una variable.
/#/$q
en una expansión de parámetros sustituye el comienzo del patrón (como expresión regular^
)con el carácter de comillas.
/%/$q
en una expansión de parámetros sustituye el final del patrón (como expresión regular$
)con el carácter de comillas.
Hay algunos cambios en las declaraciones anteriores para usar un carácter de comillas diferente, agregar comas entre los parámetros y eliminar la coma final. Y, por supuesto, estoy siendo malo al poner la contraseña en la invocación de mysql. Entonces demándame.
q="'"; t=( "${@/#/$q}" ); u="${t[@]/%/$q,}"; v="u.email in( ${u%,} )"
mysql -uprod_program -h10.90.2.11 -pxxxxxxxxxxxx my_database <
похоже, что ваша оболочка пытается оперировать переменной number++
, а не применять арифметическую операцию к переменной number
. Вероятно, это связано с тем, что синтаксис ++
не поддерживается вашей оболочкой.
Чтобы обойти это, вы можете указать оболочку, в которой вы хотите, чтобы скрипт выполнялся. Для этого добавьте
#!/bin/bash
в качестве первой строки вашего скрипта.
Используйте
#!/bin/bash
или
bash counter.sh
или сделать его совместимым с
#!/bin/sh
Как правило, следует использовать IDE или вставить свой код в https://www.shellcheck.net, чтобы избежать подобных проблем.