rom*_*sse 5 bash shell increment
我想做这样的事情
#!/bin/bash
nb=$(find . -type f -name '*.mp4' | wc -l)
var=0
find . -type f -name '*.mp4' -exec ((var++)) \;
echo $var
Run Code Online (Sandbox Code Playgroud)
但它不起作用?你能帮助我吗 ?
你不能。每个exec过程都在单独的过程中执行。这些进程不是 shell 的一部分,因此它们无法访问或更改 shell 变量。(他们可能会读取环境变量,但是一旦进程退出,这些变量的更新版本就会丢失;他们无法进行更改)。
如果要修改 shell 状态,则需要在 shell 本身中执行此操作。因此:
#!/usr/bin/env bash
# ^^^^- NOT /bin/sh; do not run as "sh scriptname"
while IFS= read -r -d '' filename; do
((++var))
done < <(find . -type f -name '*.mp4' -print0)
Run Code Online (Sandbox Code Playgroud)
请注意前增量与后增量——如果您运行脚本,这可以帮助您避免一些问题set -e(尽管我认为更好的做法是避免该“功能”)。
有关详细信息,请参阅使用查找。