【问题标题】:Preserving escapes in bash arguments $@在 bash 参数中保留转义符 $@
【发布时间】:2014-02-17 03:33:19
【问题描述】:

与此相关:Preserve Quotes in bash arguments

一个简单的例子,我只是用nohup运行一个命令...

#!/bin/bash
nohup "$@"

...

./myscript gedit some\ file\ with\ spaces.txt

这很好用。但是,我不知道如何在使用中间变量时保留正确的参数位...

#!/bin/bash
CMD="$@"
printf "%q\n" "$CMD" #for debugging
nohup $CMD

我已经尝试了一些排列,但在所有情况下都不起作用。我错过了什么?理想情况下,我希望能够在 nohup 之前修改 $CMD

【问题讨论】:

    标签: bash escaping


    【解决方案1】:

    你需要使用一个数组。

    cmd=( "$@" )
    printf '%q\n' "${cmd[@]}"
    nohup "${cmd[@]}"
    

    标量变量(字符串)是 NUL 分隔的,因此它们不能包含参数列表(其本质上是 NUL 分隔的)。

    另请参阅the BashSheet entry on arraysBashFAQ #5(解释如何使用数组)和BashFAQ #50(解释由这样做造成的陷阱)。

    【讨论】:

    • 对 BashFAQ 的参考点赞
    • 为阻止我因类似问题拔头发而竖起大拇指。
    猜你喜欢
    • 2014-12-14
    • 1970-01-01
    • 2019-09-09
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多