在 bash 变量值中转义空格而不使用引号

在 bash 变量值中转义空格而不使用引号

在 bash 脚本中,我们可以用 转义空格\。有没有办法从代码中执行相同操作?

$ a=hello\ world
$ echo $a
hello world
$ b=${a:?}  # ? used as dummy; it will not work
$ echo $b
hello\ world

呼叫者

#!/bin/bash
name=$1
if [[ -n $name ]]; then
    where_query="--where name $name"
fi
mycommand $where_query

我的命令,外部程序,我们无法修改。添加的虚拟代码仅用于说明目的。

#!/bin/bash
for i in "${@}"
do
   echo "$i"
done

实际的

$ caller.bash "foo bar"
--where
name
foo
bar

预期的

$ caller.bash "foo bar"
--where
name
foo bar

答案1

您要做的事情无法通过简单的字符串变量实现。您尝试向“外部程序”传递三个参数或不传递任何参数我的命令。您应该使用 bash 数组。请尝试以下操作:

呼叫者

#!/bin/bash
name=$1
if [[ -n $name ]]; then
    where_query=("--where" "name" "$name")
fi
mycommand "${where_query[@]}"

你的脚本也有引用错误。你应该检查全部你的脚本位于https://www.shellcheck.net/在尝试使用它们之前。

相关内容