如何搜索任意路径并确定它是否有两个文件夹名称?文件夹名称可以按任何顺序出现在任何位置。不是贝壳专家所以在这里寻求帮助。
if [ -p "$PATH" ]; then
echo "path is set"
else
echo "path is not set"
fi
我发现了这个细分,但我不确定它是否有用。 $ PATH是一个特殊的变量吗?
答案 0 :(得分:1)
首先,让我确保我理解正确的问题。你有一些路径(比如" / home / sam / foo / bar / baz")你想测试它是否包含两个特定的目录名称(例如" foo"和&#34 ; bar")以任何顺序,对吧?所以,寻找" foo"和" bar":
/home/sam/foo/bar/baz
会匹配/mnt/bar/subdir/foo
也会匹配/mnt/bar/foo2
不匹配,因为" foo2"不是" foo" 如果这是正确的,你可以在bash中做两次测试:
dir1="foo"
dir2="bar"
if [[ "/$path/" = *"/$dir1/"* && "/$path/" = *"/$dir2/"* ]]; then
echo "$path" contains both $dir1 and $dir2"
else
echo "$path" does not contain both $dir1 and $dir2"
fi
注意:
[[ ]]
条件表达式,它与[ ]
不同,在基本shell中不可用。如果使用这种类型的表达式,则需要使用shebang启动shell脚本,告诉操作系统使用bash运行它,而不是通用shell(即第一行应该是#!/bin/bash
或{{1} }),并且不要使用#!/usr/bin/env bash
命令运行它(它将覆盖shebang)。sh
和*"/$dir1/"*
- 也就是说,它匹配这些名称,每端都有一个斜杠,也许是某些东西之前和之后的其他(*"/$dir2/"*
)。但由于路径可能无法以斜线开头和/或结尾,因此我们添加它们(*
)以确保它们在那里。"/$path/"
作为变量 - 它是一个非常特殊的变量,告诉shell在哪里可以找到可执行命令。如果您曾经将它用于其他任何事情,您的脚本将突然开始获取"命令未找到"错误。实际上,有一堆全大写的特殊含义变量;为避免与它们发生冲突,请为您的事物使用小写或混合大小写变量。