holzfelix schrieb:
| tempsafe=$(find -type f -name "Matrix_*" | wc -l)
echo $tempsafe
tempsafe=$(( $tempsafe + 1 ))
echo $tempsafe
tee Matrix_$tempsafe.txt
|
Und, wo ist das Problem?
so hab ichs getestet aber es wird nur ein echo ausgegeben und da steht 1 drin ... solllte aber 3 ausgeben ...
tempsafe=$(find -type f -name "Matrix_*" | wc -l) das brachte nix
tempsafe= find -type f -name "Matrix_*" | wc -l
Da fehlen die Backticks! Das kann gar nicht funktionieren, weil die Zeile oben find ausführt und nur für die Ausführung tempsafe löscht. Danach landet das Ergebnis auf der Konsole, aber nicht vom echo sondern direkt vom wc. Schau mal:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 | $ dash x.sh
0
kein backticks: ''
mit backticks: '0'
mit $(): '0'
$ dash -x x.sh
+ unset tempsafe
+ tempsafe= find -type f -name Matrix_*
+ wc -l
0
+ echo kein backticks: ''
kein backticks: ''
+ unset tempsafe
+ find -type f -name Matrix_*
+ wc -l
+ tempsafe=0
+ echo mit backticks: '0'
mit backticks: '0'
+ unset tempsafe
+ find -type f -name Matrix_*
+ wc -l
+ tempsafe=0
+ echo mit $(): '0'
mit $(): '0'
$ cat x.sh
unset tempsafe
tempsafe= find -type f -name "Matrix_*" | wc -l
echo "kein backticks: '$tempsafe'"
unset tempsafe
tempsafe=`find -type f -name "Matrix_*" | wc -l`
echo "mit backticks: '$tempsafe'"
unset tempsafe
tempsafe=$(find -type f -name "Matrix_*" | wc -l)
echo "mit \$(): '$tempsafe'"
|
so hat es wenigstens die korrekte anzahl dateien geliefert... das probleme steckt irgendwie bei der addition
Eher nicht.
habs gelöst
| typeset -i tempsafe=$(find -type f -name "Matrix_*" | wc -l)
echo $tempsafe
tempsafee=$(( $tempsafe + 1 ))
echo $tempsafee
|
Das typeset -i ist überflüssig. Das funktioniert ohne mit allen Shells prima, die ich getestet habe:
1
2
3
4
5
6
7
8
9
10
11
12
13 | $ for s in sh dash bash ksh; do echo "shell=$s"; $s -c 'x=$(ls|wc -l);echo $x;x=$((x+1));echo $x'; done
shell=sh
18
19
shell=dash
18
19
shell=bash
18
19
shell=ksh
18
19
|
Ciao
robert