Bash:使用什么分隔符将字符串转换为数组?(Laravel/dotenv/Sail/Docker Compose)

vh0rcniy  于 2023-01-10  发布在  Docker
关注(0)|答案(1)|浏览(98)

Laravel Sail应通过在dotenv文件(.env)中配置多个docker-compose文件来支持这些文件。
我的.env文件中的行...

SAIL_FILES='docker-compose.yml:docker-compose-arm.yml'

处理多个sail文件的部分(我不能/不应该编辑此部分)

if [ -n "$SAIL_FILES" ]; then
    # Convert SAIL_FILES to an array...
    SAIL_FILES=("${SAIL_FILES//:/ }")

    for FILE in "${SAIL_FILES[@]}"; do
        if [ -f "$FILE" ]; then
            DOCKER_COMPOSE+=(-f "$FILE")
        else
            echo "${BOLD}Unable to find Docker Compose file: '${FILE}'${NC}" >&2

            exit 1
        fi
    done
fi

我尝试了一些不同的分隔符(逗号,空格,等等)。它看起来很简单,但我不能让它工作。我不明白SAIL_FILES=("${SAIL_FILES//:/ }")如何执行数组转换(我是第一次使用Bash)。
我重新创建了问题here,它应该只是在新行中回显每个文件名。
这似乎没有记录在拉腊维尔的任何地方。
谢谢。

yvgpqqbh

yvgpqqbh1#

双引号可防止单词拆分。如果希望发生单词拆分,请不要引用:

SAIL_FILES=(${SAIL_FILES//:/ })

也可以使用$IFS来拆分字符串而不进行替换:

IFS=: SAIL_FILES=($SAIL_FILES)

相关问题