构建一个命令行 bash 脚本,路径名中包含空格

构建一个命令行 bash 脚本,路径名中包含空格

我需要一个简单的脚本来调用 gcc,但是我有一个很长的库列表,我需要将这些库传递给一个路径中有空格的目录。

我使用以下命令代替 gcc 来测试我的脚本:

#!/bin/bash
for var in "$@"
do
    echo "$var"
done

这是我尝试过的无数尝试之一:

#!/bin/bash
LIBDIR="lib dir"
LIBS=
LIBS+="lib1 "
LIBS+="lib2 "
CMD="./debug.sh "
for LIB in $LIBS
do
    CMD+="-I ${LIBDIR}/${LIB} " 
done
${CMD}
exit

显然,问题在于 bash 无法区分哪些空格用于分隔参数,哪些不是,但无论我如何放置引号或反斜杠,我都无法弄清楚如何“引用”某些空格而不是其他空格。

答案1

对于您的具体情况:

#!/bin/bash
LIBDIR="lib dir"
LIBS=("lib1" "lib2")
CMD=(./debug.sh)
for LIB in "${LIBS[@]}"
do
    CMD+=(-I "${LIBDIR}/${LIB}")
done
"${CMD[@]}"
exit

使用了两个数组:LIBS用于库名称,以及CMD用于命令本身。如果有的话这也将起作用其他额外的空间。+=(...)将新项目连接到数组的末尾,就像将新字符串连接到字符串的末尾一样。"${CMD[@]}"扩展到数组的所有值作为单独的单词(不按空格分割)。为什么我的 shell 脚本会因为空格或其他特殊字符而卡住?总体上有更多关于该主题的内容,并且我们如何运行存储在变量中的命令?在具体的。

相关内容