Bash脚本变量中的空格有问题

时间:2019-05-02 06:41:42

标签: bash nginx

我正在尝试在bash脚本中创建一个变量,并且第一个空格引起了问题。

变量看起来像这样:

const workbook = new Excel.Workbook();

我正在尝试运行“ make install”,并且它总是抱怨第一个空格(即,在上面的示例中,单词“ here”之前)。

如何创建带空格的变量?我尝试使用双引号,尝试了各种转义单引号的方法,但我什么都无法工作。

我在做什么错了?

下面的实际代码:

VAR="
   --option1=foo \
   --option2=bar \
   --option3='something here with spaces'"

2 个答案:

答案 0 :(得分:3)

您还没有显示如何使用此变量,但是如果我理解正确,那么您有一个命令在引号之外包含$VAR

问题在于:

echo $VAR

等效于此:

echo "--option1=foo" "--option2=bar" "--option3='something" "here" "with" "spaces'"

因为变量内的空格很重要,但变量内的引号却没有。

相反,您需要使用 array 。您可以这样声明变量:

VAR=(
   --option1=foo
   --option2=bar
   --option3='something here with spaces'
)

并像这样使用它:

echo "${VAR[@]}"       # note the quotation-marks

等效于此:

echo "--option1=foo" "--option2=bar" "--option3=something here with spaces"

答案 1 :(得分:0)

我尝试了所有可能的转义引号组合,最后以“ configure”语句结束,而没有像这样的双引号或单引号变量:

    ./configure --prefix=/etc/nginx \
                --sbin-path=/usr/sbin/nginx \
                --conf-path=/etc/nginx/nginx.conf \
                --error-log-path=/var/log/nginx/error.log \
                --http-log-path=/var/log/nginx/access.log \
                --pid-path=/var/run/nginx.pid \
                --lock-path=/var/run/nginx.lock \
                --http-client-body-temp-path=/var/cache/nginx/client_temp \
                --http-proxy-temp-path=/var/cache/nginx/proxy_temp \
                --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
                --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
                --http-scgi-temp-path=/var/cache/nginx/scgi_temp \
                --user=nginx \
        --group=nginx \
        --with-cc-opt="-m64 -march=native -DTCP_FASTOPEN=23 -g -O3 -Wno-error=strict-aliasing -fstack-protector-strong -flto -fuse-ld=gold --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wno-deprecated-declarations -gsplit-dwarf" \
        --with-ld-opt="-ljemalloc -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie" \
        $NGINX_MODULES

我也有一些错误,例如必须使用以下命令安装“ jemalloc”:

apt-get install libjemalloc-dev

与从bash脚本中的空格或引号开始相比,这是从源代码构建nginx的更大练习。我希望这可以帮助其他人克服我遇到的许多挑战。