2016-07-21 108 views
0

如何检查$dir是否等于"string"如何将文件夹与字符串进行比较

我想这一点:

array=(/path/to/folders/*) 

for dir in "${array[@]}"; do 
    if["${dir}" == "/path/to/folders/subfolder"]; then 
    do something... 
    fi 
done 
+0

使用[shellcheck.net](http://shellcheck.net)来语法检查你的shell代码;在这种情况下,你会看到:'你在[之前]和之前需要一个空格 – mklement0

回答

3

在壳,空间是非常重要的。替换:

if["${dir}" == "/path/to/folders/subfolder"]; then 

与:

if [ "${dir}" = "/path/to/folders/subfolder" ]; then 

注:

  1. 在壳,[是一个命令的名称。它不应该与其他字符串连接。

  2. ][所需的最终参数。它也不应该与其他字符串连接。

  3. 虽然bash中可以接受或====为内部[...]字符串相等的POSIX兼容操作者。

1
奇怪

,因为它看起来,[实际上是一个命令,也被称为test命令。尝试:

type [ 

你得到:

[ is a shell builtin 

这是历史性的。语句if的语法实际上是ifcompound_list,括号实际上并不是if语句的一部分,尽管这当然是它们常用的地方。

shell语法的一般原则之一是令牌由空格分隔。因此,[命令的参数必须以空格分隔,正如您需要ls -lls-l将不起作用)中的空格一样。

另外,[最终(最右边)参数必须是]。再次,空白区域必须将此区分开来,使其成为一个令牌。

所以:

if [ "$dir" == "/path/to/folders/subfolder" ] 

在这个例子中我们传递4个参数的[命令。

{ }是多余的,但如果您喜欢打字{ },他们没有任何伤害。

0

虽然

if [ "${dir}" = "/path/to/folders/subfolder" ]; then 
[ this ]

回答你的问题,我建议你使用

if [[ "${dir}" == "/path/to/folders/subfolder" ]]; then 

,而不是因为[[..]]形式支持正则表达式匹配(与=~运营商)。有关更多详细信息,请参见此[ article ]

相关问题