如何从内联if中转义bash脚本中的空间?

如何从内联if中转义bash脚本中的空间?,bash,Bash,我知道以前在stackoverflow(例如和)上也有类似的问题被问过和回答过,但到目前为止,我还不能为我的具体案例找出答案 我试图创建一个脚本,仅当变量something等于“true”(我试图做的是将当前文件夹作为位于Docker容器中/src的卷装载): 问题是$PWD可能包含空格,如果是这样,我的脚本将无法工作。我还尝试将“$PWD”赋值给中间变量,但仍然不起作用: temp="$PWD" docker run --name image-name `if [ "${something}"

我知道以前在stackoverflow(例如和)上也有类似的问题被问过和回答过,但到目前为止,我还不能为我的具体案例找出答案

我试图创建一个脚本,仅当变量
something
等于
“true”
(我试图做的是将当前文件夹作为位于Docker容器中
/src
的卷装载):

问题是
$PWD
可能包含空格,如果是这样,我的脚本将无法工作。我还尝试将
“$PWD”
赋值给中间变量,但仍然不起作用:

temp="$PWD"
docker run --name image-name `if [ "${something}" == "true" ]; then echo "-v $temp:/src"; fi` ....
如果我跑步:

docker run --name image-name -v "$PWD":/src ....
从纯bash(不使用我的脚本)开始,一切都正常

有人知道如何解决这个问题吗?

使用数组

docker_args=()
if something; then
    docker_args+=( -v "$PWD/src" )
fi
docker run --blah "${docker_args[@]}" …
没有数组?使用
set
(在函数中,这样就不会影响外部范围)

一般来说:

knacker() {
    if something; then
        set -- -v "$PWD:/src" "$@"
    fi
    crocker "$@"
}
knacker run --blah
但有些命令(如docker、git等)需要特殊处理,因为它们是由两部分组成的命令结构

slacker() {
    local cmd="$1"
    shift
    if something; then
        set -- -v "$PWD:/src" "$@"
    fi
    docker "$cmd" "$@"
}
slacker run --blah
使用数组

docker_args=()
if something; then
    docker_args+=( -v "$PWD/src" )
fi
docker run --blah "${docker_args[@]}" …
没有数组?使用
set
(在函数中,这样就不会影响外部范围)

一般来说:

knacker() {
    if something; then
        set -- -v "$PWD:/src" "$@"
    fi
    crocker "$@"
}
knacker run --blah
但有些命令(如docker、git等)需要特殊处理,因为它们是由两部分组成的命令结构

slacker() {
    local cmd="$1"
    shift
    if something; then
        set -- -v "$PWD:/src" "$@"
    fi
    docker "$cmd" "$@"
}
slacker run --blah
尝试以下操作(使用数组方式):

尝试以下操作(使用数组方式):


这从本质上说是错误的。所以答案是你没有。你不能这样做。您使用的是数组或类似的数组。欢迎使用文件名地狱中的空间。一个漂亮的符号链接指向该死的文件名,不包含空格,怎么样?这基本上是。所以答案是你没有。你不能这样做。您使用的是数组或类似的数组。欢迎使用文件名地狱中的空间。一个漂亮的符号链接指向该死的文件名,不包含空格,怎么样?太棒了。以秒计;-)我不知道。以秒计;-)