Upstart shell脚本:`[`未按预期工作

Upstart shell脚本:`[`未按预期工作,upstart,dash-shell,Upstart,Dash Shell,我有一个剧本: ENABLE_SYSLOG=true test -r /etc/default/inotifywait && . /etc/default/inotifywait || exit 99 test -d $INOTIFY_FOLDER || exit 100 inotifywait -mrq -e ATTRIB --format '%w%f' "$INOTIFY_FOLDER" | while IFS= read -r FILE do if [ -f $F

我有一个剧本:

ENABLE_SYSLOG=true
test -r /etc/default/inotifywait && . /etc/default/inotifywait || exit 99
test -d $INOTIFY_FOLDER || exit 100

inotifywait -mrq -e ATTRIB --format '%w%f' "$INOTIFY_FOLDER" | while IFS= read -r FILE
do
    if [ -f $FILE ];then
        # If file
        if [ `stat -c %a $FILE` != "664" ] ;then
            CHMOD_LOG=$(chmod -v 664 "$FILE")
            [[ "$ENABLE_SYSLOG" = true ]] && logger -t inotifywait -p user.info "$CHMOD_LOG" &
        fi
    else
        # If directory
        if [ `stat -c %a $FILE` != "2775" ] ;then
            CHMOD_LOG=$(chmod -v 2775 "$FILE")
            [[ "$ENABLE_SYSLOG" = true ]] && logger -t inotifywait -p user.info "$CHMOD_LOG" &
        fi
    fi
done
为什么是我的情况

[[ "$ENABLE_SYSLOG" = true ]] && logger -t inotifywait -p user.info "$CHMOD_LOG"
不工作

如果我删除

[[ "$ENABLE_SYSLOG" = true ]] &&
那么一切都好了

我尝试删除符号(&),尝试其他条件(如您在示例中所看到的),尝试if而不是[[-但都是徒劳的


在大多数高级shell(
ksh
bash
、和
zsh
)中,任何条件都不起作用,但在POSIX
sh
和Ubuntu
/bin/sh
(这是到
/bin/dash
的符号链接)中都没有


您可以将
[…]
替换为
[…]
test…
(两者都是等效的,第二种方法明确说明
test
是一个命令,而
[…]
显示为特殊语法),或者(除非该脚本作为
sh FILENAME
显式调用)请注意,
[…]
的解析方式与
测试或
[…]
不同,因为
[…]是一个保留字,而
[
只是内置命令。具体来说,
[
]之间不进行字段拆分和全局搜索
,而在此上下文中,
=
=
如果两个字符串都没有被引用,则执行shell模式匹配。此外,
=~
执行regexp匹配的操作符在
test
[

中不存在,您可以说:
“$ENABLE\u SYSLOG”&&&…
噢,谢谢。这很了不起。虽然这看起来很聪明,但可能不是个好主意。你应该试着找出你的尝试不起作用的原因,因为它应该起作用。你使用的是什么版本的
bash
?你如何运行脚本?这很有效。谢谢你的提示)Ubuntu确实使用了
dash
,而不是
bash
,for系统脚本,因此不支持
[[