mirror of
https://github.com/koalaman/shellcheck.git
synced 2025-10-03 19:29:44 +08:00
let count++
gives a warning suggesting (( count++ ))
instead. The deleted "Equivalently" code was _not_ equivalent and it didn't work because count
was modified in a subshell (as shellcheck itself points out)
18
SC2044.md
18
SC2044.md
@@ -5,7 +5,7 @@
|
|||||||
```sh
|
```sh
|
||||||
for file in $(find mydir -mtime -7 -name '*.mp3')
|
for file in $(find mydir -mtime -7 -name '*.mp3')
|
||||||
do
|
do
|
||||||
let count++
|
(( count++ ))
|
||||||
echo "Playing file no. $count"
|
echo "Playing file no. $count"
|
||||||
play "$file"
|
play "$file"
|
||||||
done
|
done
|
||||||
@@ -23,25 +23,13 @@ The most general fix (that requires the least amount of thinking to apply) is ha
|
|||||||
```sh
|
```sh
|
||||||
while IFS= read -r -d '' file
|
while IFS= read -r -d '' file
|
||||||
do
|
do
|
||||||
let count++
|
(( count++ ))
|
||||||
echo "Playing file no. $count"
|
echo "Playing file no. $count"
|
||||||
play "$file"
|
play "$file"
|
||||||
done < <(find mydir -mtime -7 -name '*.mp3' -print0)
|
done < <(find mydir -mtime -7 -name '*.mp3' -print0)
|
||||||
echo "Played $count files"
|
echo "Played $count files"
|
||||||
```
|
```
|
||||||
|
|
||||||
> Equivalently:
|
|
||||||
>
|
|
||||||
> ```sh
|
|
||||||
> find mydir -mtime -7 -name '*.mp3' -print0 | while IFS= read -r -d '' file
|
|
||||||
> do
|
|
||||||
> let count++
|
|
||||||
> echo "Playing file no. $count"
|
|
||||||
> play "$file"
|
|
||||||
> done
|
|
||||||
> echo "Played $count files"
|
|
||||||
> ```
|
|
||||||
|
|
||||||
In usage it's very similar to the `for` loop: it gets its output from a `find` statement, it executes a shell script body, it allows updating/aggregating variables, and the variables are available when the loop ends.
|
In usage it's very similar to the `for` loop: it gets its output from a `find` statement, it executes a shell script body, it allows updating/aggregating variables, and the variables are available when the loop ends.
|
||||||
|
|
||||||
It requires Bash, and works with GNU, Busybox, OS X, FreeBSD and OpenBSD find, but not POSIX find.
|
It requires Bash, and works with GNU, Busybox, OS X, FreeBSD and OpenBSD find, but not POSIX find.
|
||||||
@@ -54,7 +42,7 @@ If you don't need `find` logic like `-mtime -7` and just use it to match globs r
|
|||||||
shopt -s globstar nullglob
|
shopt -s globstar nullglob
|
||||||
for file in mydir/**/*.mp3
|
for file in mydir/**/*.mp3
|
||||||
do
|
do
|
||||||
let count++
|
(( count++ ))
|
||||||
echo "Playing file no. $count"
|
echo "Playing file no. $count"
|
||||||
play "$file"
|
play "$file"
|
||||||
done
|
done
|
||||||
|
Reference in New Issue
Block a user