如何检查$dir
是否等于"string"
?如何将文件夹与字符串进行比较
我想这一点:
array=(/path/to/folders/*)
for dir in "${array[@]}"; do
if["${dir}" == "/path/to/folders/subfolder"]; then
do something...
fi
done
如何检查$dir
是否等于"string"
?如何将文件夹与字符串进行比较
我想这一点:
array=(/path/to/folders/*)
for dir in "${array[@]}"; do
if["${dir}" == "/path/to/folders/subfolder"]; then
do something...
fi
done
在壳,空间是非常重要的。替换:
if["${dir}" == "/path/to/folders/subfolder"]; then
与:
if [ "${dir}" = "/path/to/folders/subfolder" ]; then
注:
在壳,[
是一个命令的名称。它不应该与其他字符串连接。
]
是[
所需的最终参数。它也不应该与其他字符串连接。
虽然bash中可以接受或==
=
,=
为内部[...]
字符串相等的POSIX兼容操作者。
,因为它看起来,[
实际上是一个命令,也被称为test
命令。尝试:
type [
你得到:
[ is a shell builtin
这是历史性的。语句if
的语法实际上是if
compound_list,括号实际上并不是if
语句的一部分,尽管这当然是它们常用的地方。
shell语法的一般原则之一是令牌由空格分隔。因此,[
命令的参数必须以空格分隔,正如您需要ls -l
(ls-l
将不起作用)中的空格一样。
另外,[
的最终(最右边)参数必须是]
。再次,空白区域必须将此区分开来,使其成为一个令牌。
所以:
if [ "$dir" == "/path/to/folders/subfolder" ]
在这个例子中我们传递4个参数的[
命令。
{ }
是多余的,但如果您喜欢打字{ }
,他们没有任何伤害。
虽然
if [ "${dir}" = "/path/to/folders/subfolder" ]; then
在
[ this ]
回答你的问题,我建议你使用
if [[ "${dir}" == "/path/to/folders/subfolder" ]]; then
,而不是因为[[..]]
形式支持正则表达式匹配(与=~
运营商)。有关更多详细信息,请参见此[ article ]。
使用[shellcheck.net](http://shellcheck.net)来语法检查你的shell代码;在这种情况下,你会看到:'你在[之前]和之前需要一个空格 – mklement0