Ele*_*nce 10 shell directory shell-script files control-flow
我想检查工作目录中是否存在多个目录,例如dir1,dir2和dir3。
我有以下
if [ -d "$PWD/dir1" ] && [ -d "$PWD/dir2" ] && [ -d "$PWD/dir3" ]; then
echo True
else
echo False
fi
Run Code Online (Sandbox Code Playgroud)
但我怀疑有一种更优雅的方式来做到这一点。不要假设目录名称中存在模式。
目标是检查几个目录的存在和其他目录的不存在。
我正在使用 Bash,但首选可移植代码。
gle*_*man 10
我会循环:
result=True
for dir in \
"$PWD/dir1" \
"$PWD/dir2" \
"$PWD/dir3"
do
if ! [ -d "$dir" ]; then
result=False
break
fi
done
echo "$result"
Run Code Online (Sandbox Code Playgroud)
将break导致循环短路,就像你的链&&
小智 5
循环可能更优雅:
arr=("$PWD/dir1" "$PWD/dir2" "$PWD/dir2")
for d in "${arr[@]}"; do
if [ -d "$d"]; then
echo True
else
echo False
fi
done
Run Code Online (Sandbox Code Playgroud)
这是巴什。更便携的是Sh。在那里你可以使用位置数组:
set -- "$PWD/dir1" "$PWD/dir2" "$PWD/dir2"
Run Code Online (Sandbox Code Playgroud)
然后循环使用它"$@"。
如果您已经期望它们是目录并且只是检查它们是否都存在,您可以使用该ls实用程序的退出代码来确定是否发生了一个或多个“错误”:
ls "$PWD/dir1" "$PWD/dir2" "$PWD/dir3" >/dev/null 2>&1 && echo All there
Run Code Online (Sandbox Code Playgroud)
我将输出和 stderr 重定向/dev/null到以使其消失,因为我们只关心 的退出代码ls,而不是它的输出。写入的任何内容都会/dev/null消失——它不会写入您的终端。
为什么不只是:
if [ -d "dir1" -a -d "dir2" -a -d "dir3" ]; then
echo True
else
echo False
fi
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7424 次 |
| 最近记录: |