如何从内联if中转义bash脚本中的空间?
我知道以前在stackoverflow(例如和)上也有类似的问题被问过和回答过,但到目前为止,我还不能为我的具体案例找出答案 我试图创建一个脚本,仅当变量如何从内联if中转义bash脚本中的空间?,bash,Bash,我知道以前在stackoverflow(例如和)上也有类似的问题被问过和回答过,但到目前为止,我还不能为我的具体案例找出答案 我试图创建一个脚本,仅当变量something等于“true”(我试图做的是将当前文件夹作为位于Docker容器中/src的卷装载): 问题是$PWD可能包含空格,如果是这样,我的脚本将无法工作。我还尝试将“$PWD”赋值给中间变量,但仍然不起作用: temp="$PWD" docker run --name image-name `if [ "${something}"
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
尝试以下操作(使用数组方式):
尝试以下操作(使用数组方式):
这从本质上说是错误的。所以答案是你没有。你不能这样做。您使用的是数组或类似的数组。欢迎使用文件名地狱中的空间。一个漂亮的符号链接指向该死的文件名,不包含空格,怎么样?这基本上是。所以答案是你没有。你不能这样做。您使用的是数组或类似的数组。欢迎使用文件名地狱中的空间。一个漂亮的符号链接指向该死的文件名,不包含空格,怎么样?太棒了。以秒计;-)我不知道。以秒计;-)