2012-05-06 17 views
6

Voglio produrre una stringa aggiungendo un numero intero casuale a una variabile per creare la stringa. Bash tuttavia, aggiunge solo i numeri insieme.Aggiungere numeri interi come stringhe a una variabile bash

#!/bin/bash 
b="" 
for ((x=1; x<=3; x++)) 
do 
number=$RANDOM 
let number%=9 
let b+=$number 
done 
echo ${b} 

Dire ogni numero casuale è 1, lo script di uscita 3 invece di 111. Come faccio a ottenere il risultato desiderato di 111?

risposta

16

Ci sono diverse possibilità per ottenere il comportamento desiderato. Vediamo prima esaminare cosa avete fatto:

let b+=$number 

Esecuzione help let:

let: let ARGUMENT... 
    Evaluate arithmetic expressions. 

che spiega perché let b+=$number esegue un'aggiunta intero (1, 2, 3) di $number-b invece di concatenazione di stringhe.

È sufficiente rimuovere let e il comportamento desiderato 1, 11, 111.

L'altro metodo per eseguire concatenazione di stringhe.

b="$b$number" 

Sì, semplicemente "facciamo b diventare il risultato della concatenazione b e number

Come nota laterale, b="" è equivalente a b= come "" viene espanso su una stringa vuota. L'operazione del modulo su una variabile può essere eseguita con l'espansione aritmetica: number=$((RANDOM%9)).

+1

+1 per una spiegazione approfondita –

+0

Puoi anche fare un'espansione aritmetica come questa: '((numero = RANDOM% 9))' –

Problemi correlati