Portál AbcLinuxu, 16. července 2025 12:12
[root@zero ~]# X=$(echo 'select * from user' |mysql -N -D mysql -u root|head -n 1) [root@zero ~]# echo $X localhost root Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y 0 0 0
IFS=$'\n' X=($(mysql -N -D mysql -u root <<<<'select * from user'))
${#X}
vrací hodnotu špatně a bez ohledu na nastavené IFS. Jsem blbej já, nebo bash?
${#X[*]}
.
${#x}
pro skalár dává délku řetězce
${#x}
pro pole dává délku prvního prvku (stejně jako $x
první prvek)
${#x[*]}
pro pole dává počet prvků pole
Toto vše mi funguje. Můžeš uvést nějaký příklad, kvůli kterému nebudu muset přidávat do mysql tabulky?
#!/bin/bash USER="root" #PASS="-pHESLOjeHESLO" #note: from DATABASE_NAME.TABLE_NAME SQL_QUERY=" select * from mysql.user " mysql -N -u $USER $PASS <<<$SQL_QUERY | \ gawk -F'\t' '{print $1,$2}' | #print 3,4...x kolko je treba :) while read COL1 COL2 #COL3 ... COLx kolko je treba :) do #napr. echo "COL1: $COL1 | COL2: $COL2" done
IFS=$'\n' for row in $(mysql -N -D mysql -u root -e 'select * from user') do ( IFS=$'\t' i=1 for col in $row do echo -n "| COL$i: $col " let i++ done; echo "|" ) donenebo
IFS=$'\n' for row in $(mysql -N -D mysql -u root -e 'select * from user') do ( IFS=$'\t' cols=($row) echo -e "host: ${cols[0]}\tname: ${cols[1]}" ) donenebo
data="$(mysql -N -D mysql -u root -e 'select * from user')" data="${data//$'\n'/|}" IFS='|' for row in $data do cols=(${row//$'\t'/|}) echo "host: ${cols[0]} | name: ${cols[1]}" done
mysql -N -D mysql -u root -e 'select * from user' | while read row do IFS='|' cols=(${row//$'\t'/|}) echo "host: ${cols[0]} | name: ${cols[1]}" done
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.