toyotaki Δημοσ. 11 Απριλίου 2011 Δημοσ. 11 Απριλίου 2011 Πώς μπορώ ένα string της μορφής "1,930,000,000" να το μετατρέψω σε αριθμό ώστε να μπορώ να κάνω πράξεις με αυτό το νούμερο σε bash shell script; Το "," δεν υποδηλώνει δεκαδικό. Ευχαριστώ εκ των προτέρων.
parsifal Δημοσ. 11 Απριλίου 2011 Δημοσ. 11 Απριλίου 2011 Το bash δεν παρέχει διάφορα primitive types όπως μία τυπική γλώσσα προγραμματισμού. Όλες οι μεταβλητές είναι strings. Αυτό που θέλεις να κάνεις είναι να αφαιρέσεις τα κόμματα από το string της μεταβλητής σου, ώστε να έρθει σε «καθαρή» μορφή και να μπορείς να κάνεις με αυτό τις αριθμητικές πράξεις που υποστηρίζει το bash. Αυτό μπορεί να γίνει με την ενσωματωμένη δυνατότητα για substring replacement/deletion του bash. Ένα παράδειγμα: > parsifal@vmubuntu32:/tmp$ number=1,930,000,000 parsifal@vmubuntu32:/tmp$ echo $number 1,930,000,000 parsifal@vmubuntu32:/tmp$ let number+=1 parsifal@vmubuntu32:/tmp$ echo $number 1 # Ουπς! Όχι αυτό που περιμέναμε! Πιθανότατα, το bash αποτιμά ως 0 τη μεταβλητή, προσθέτει το 1 και γι' αυτό το λάθος αποτέλεσμα parsifal@vmubuntu32:/tmp$ number=1,930,000,000 # Πάμε απ' την αρχή... parsifal@vmubuntu32:/tmp$ number=${number//,} # Διαγραφή όλων των εμφανίσεων του χαρακτήρα ',' από τη μεταβλητή parsifal@vmubuntu32:/tmp$ echo $number 1930000000 parsifal@vmubuntu32:/tmp$ let number+=1 parsifal@vmubuntu32:/tmp$ echo $number 1930000001 # It works!
firewalker Δημοσ. 11 Απριλίου 2011 Δημοσ. 11 Απριλίου 2011 Σε πράξεις στο bash μπορεί να σε βοηθήσει και η χρήση της εξωτερικής εντολής bc(1).
toyotaki Δημοσ. 11 Απριλίου 2011 Μέλος Δημοσ. 11 Απριλίου 2011 Δοκίμασα την απάντηση του parsifal και σε εμένα δουλεύει και μπορώ να κάνω τις πράξεις μου. Ευχαριστώ πολύ και για τις απαντήσεις σας.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.