Saya memiliki skrip di bawah ini untuk mengurangi jumlah file antara dua direktori tetapi COUNT=
ekspresi tidak berfungsi. Apa sintaks yang benar?
#!/usr/bin/env bash
FIRSTV=`ls -1 | wc -l`
cd ..
SECONDV=`ls -1 | wc -l`
COUNT=expr $FIRSTV-$SECONDV ## -> gives 'command not found' error
echo $COUNT
Jawaban:
Anda hanya perlu sedikit spasi tambahan di sekitar tanda minus, dan backticks:
Waspadai status keluar:
Status keluar adalah 0 jika EKSPRESI bukan nol atau 0, 1 jika EKSPRESI nol atau 0 .
Ingatlah ini ketika menggunakan ekspresi dalam skrip bash dalam kombinasi dengan set -e yang akan segera keluar jika perintah keluar dengan status bukan-nol.
sumber
sh
shell posix . Untuk portabilitas, Anda mungkin ingin menggunakan jawaban ini.Coba sintaks Bash ini alih-alih mencoba menggunakan program eksternal
expr
:BTW, sintaks yang benar menggunakan
expr
adalah:Namun perlu diingat penggunaannya
expr
akan lebih lambat daripada sintaks Bash internal yang saya berikan di atas.sumber
$(command)
sintaks baru untuk substitusi perintah. Juga karena BASH mendukung operasi aritmatika di$(( ... ))
dalamnya lebih baik untuk tidak menggunakan utilitas eksternalexpr
$(( ... ))
digunakan untuk mengevaluasi ekspresi aritmatika.Kamu bisa memakai:
untuk menghindari proses terpisah, sesuai transkrip berikut:
sumber
Ruang putih itu penting,
expr
mengharapkan operan dan operatornya sebagai argumen terpisah. Anda juga harus menangkap output. Seperti ini:tetapi lebih umum untuk menggunakan ekspansi aritmatika bawaan:
sumber
Beginilah cara saya selalu mengerjakan matematika di Bash:
sumber
|bc
perintah ketik daripada melewatkannya sekali atau dua kali. Stroke berbeda untuk orang yang berbeda seperti yang mereka katakan.Untuk aritmatika integer sederhana, Anda juga dapat menggunakan perintah builtin let .
Untuk info lebih lanjut
let
, lihat di sini .sumber
let "sanity_check_duration=sanity_check_duration_end_time_delay_sec - sanity_check_duration_start_time_delay_sec"
(menghilangkan tanda dolar dari variabel)Atau dengan 3 metode yang disarankan Anda dapat mencoba
let
yang melakukan operasi aritmatika pada variabel sebagai berikut:let COUNT=$FIRSTV-$SECONDV
atau
let COUNT=FIRSTV-SECONDV
sumber
Gunakan Python:
Keluaran
sumber