Я не обновлял свой сервер Arch в течение нескольких недель: ncurses действительно перешел на версию 6 в начале сентября, но PHP следовало обновить вместе с ней.
Быстрое и грязное исправление: pacman -U /var/cache/pacman/pkg/ncurses-5.9-7-i686.pkg.tar.xz
Вы можете установить PHP через Пакман
. Есть ряд частей, которые я считаю необходимыми, включая php
, php-apache
, php-gd
, php-sqlite
. Если вы компилируете PHP из исходных кодов, чтобы оставаться на определенной версии, я не уверен, что это хорошая идея, поскольку PHP часто исправляется. Было бы сложно не отставать от патчей безопасности, компилируя все самостоятельно.
Dada una matriz arr
, su longitud (número de elementos )está dada por ${#arr[@]}
.
Usando esto con su matriz vmfarm1
:
printf ' \n|/%d.vmfarm1 ' "${#vmfarm1[@]}" >>textfile.txt
vmfarm1, maximus
y firefly
no son solo variables, son matrices.
Use la sintaxis adecuada:${#vmfarm1[@]}
es el número de entradas en su matriz.
Para imprimir el número de elementos en una variable de matriz en varios shells con soporte de matriz:
csh
/ tcsh
/ zsh
/ rc
/ es
/akanga
:echo $#array
ksh
¹/ bash
¹/zsh
:echo "${#array[@]}"
fish
:count $array
yash
:echo "${array[#]}"
"$@"
):echo "$#"
Ahora, para la cantidad de palabras delimitadas por espacios en blanco en todos los elementos de una variable de matriz, es posible que desee usar wc -w
, pero debe ingresar el contenido de todos los elementos separados por al menos uno espacio en blanco por ejemplo con:
printf '%s\n' $array:q | wc -w # csh/tcsh
printf '%s\n' "${array[@]}" | wc -w # ksh/bash/zsh/yash
printf '%s\n' $array | wc -w # fish/zsh/rc/es/akanga
printf '%s\n' "$@" | wc -w # Bourne/POSIX
O puede dividir los elementos en más espacios en blanco -palabras delimitadas y contarlas en el propio caparazón.
csh
/tcsh
(dividido en SPC/TAB/NL)
(set noglob; set tmp=($array); echo $#tmp)
ksh
/ bash
/yash
($IFS
división, SPC/TAB/NL por defecto)
(set -o noglob; set -- ${array[@]}; echo "$#")
zsh
($IFS
división, SPC/TAB/NL/NUL por defecto)
echo ${#${=array}}
rc
/es
($ifs
división):
tmp = `{echo $array}
echo $#tmp
fish
(cuenta todas las secuencias de espacios en blanco (que no son -según PCRE )caracteres):
count (string match -ar -- '\S+' $array)
Bourne/POSIX($IFS
división):
(set -f; set -- $@; echo "$#")
¹ tenga en cuenta que, dado que las matrices ksh
/ bash
son escasas y tienen índices que comienzan en 0 en lugar de 1 en cualquier otra capa, ese número generalmente no será el mismo que el índice máximo en la matriz
En Bash y ksh, al expandir una matriz como si fuera una variable de cadena normal, se obtiene el primer elemento de la matriz. Es decir, $somearray
es lo mismo que ${somearray[0]}
.(*)
Entonces,
somearray=(foo bar doo)
echo "$somearray"
echo "$somearray" | wc -w
imprime foo
y 1
, ya que foo
es solo una palabra. Si tuviera somearray=("foo bar doo" "acdc abba")
en su lugar, entonces wc
mostraría tres palabras.
Deberá usar "${somearray[@]}"
para expandir todos los elementos de la matriz como palabras de shell distintas (argumentos ),o "${somearray[*]}"
para expandirlas como una sola palabra shell, unidas con espacios(**)
En cualquier caso, tenga en cuenta que el número de elementos en una matriz y el número de palabras (en el wc -w
o el sentido del lenguaje humano )no son lo mismo, consulte a continuación. Use "${#somearray[@]}"
para obtener el número de elementos en la matriz.
somearray=("foo bar doo" "acdc abba")
echo "${#somearray[@]}" # 2 elements, that contain
echo "${somearray[@]}" | wc -w # 5 whitespace separated words in total
(*)ignorando matrices dispersas y asociativas por ahora.
(**)asumiendo por defectoIFS
.
Puede que esto no sea inteligente, pero creo que puede obtener una cantidad de hosts en la matriz.
vmfarm1=(host1.com host2.com host3.com host4.com)
#maximus=(host11.com host12.com host13.com)
#firefly(host5.com)
COUNT=0
for i in ${vmfarm1[@]};
do
HOSTCOUNT=`echo $i |wc -l`
COUNT=$((COUNT + HOSTCOUNT))
done
printf "vmfarm1:%2d\n" $COUNT
Gracias