Debian 10, su: Отказано в доступе

Uso de una referencia de nombre en una versión reciente (>=4.3 )debash:

foo () {
    local param1=$1
    local -n arr=$2

    printf 'array: %s\n' "${arr[@]}"
}

myarray=( some items go here )
foo something myarray

El nombre de la variable de matriz se pasa como segundo parámetro a la función. La función declara una variable de referencia de nombre que recibe este nombre. Cualquier acceso a esa variable de referencia de nombre accederá a la variable cuyo nombre se pasó a la función.

Obviamente, esto funciona con más de una matriz.

Tenga en cuenta que en el ejemplo anterior, no puede pasar una variable llamada arra la función, por lo que se debe tener cuidado para evitar conflictos de nombres (ksh93, que también admite referencias de nombres, no Tengo este problema debido a diferentes alcances ).


Tenga en cuenta que este enfoque no funciona cuando se llama a otro script de shell. Al llamar a otro script de shell, la matriz debe pasarse en la línea de comando de ese otro script, lo que significa que debe pasarse como un conjunto de cadenas. Pasar una sola matriz de esta manera es relativamente fácil, y Hauke ​​Laging muestra los conceptos básicos de cómo hacerlo en su respuesta .

Si tiene control total sobre el contenido de las matrices, puede codificar sus datos como cadenas individuales, posiblemente delimitando sus elementos usando algún delimitador y luego analizando estas cadenas en el script de destino para volver a -formulario las matrices. Otra posibilidad sería adoptar una "interfaz" JSON entre sus scripts, lo que significa que codificaría los datos como JSON, los pasaría a la entrada estándar de los scripts (o similar )y decodificaría el documento usando jq. Sin embargo, esto se siente bastante engorroso y agregaría una sobrecarga masiva.

1
24.07.2019, 18:07
0 ответов

Теги

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