bash - 构建包含空格的参数列表

标签 bash arguments whitespace

在 bash 中,可以转义包含空格的参数。

foo "a string"

这也适用于命令或函数的参数:

bar() {
    foo "$@"
}

bar "a string"

到目前为止一切顺利,但如果我想在调用 foo 之前操纵参数怎么办?

这不起作用:

bar() {
    for arg in "$@"
    do
        args="$args \"prefix $arg\""
    done

    # Everything looks good ...
    echo $args

    # ... but it isn't.
    foo $args

    # foo "$args" would just be silly
}

bar a b c

那么当参数包含空格时如何构建参数列表?

最佳答案

有(至少)两种方法可以做到这一点:

  1. 使用数组并使用"${array[@]}"展开它:

    bar() {
        local i=0 args=()
        for arg in "$@"
        do
            args[$i]="prefix $arg"
            ((++i))
        done
    
        foo "${args[@]}"
    }
    

    那么,我们学到了什么? "${array[@]}"${array[*]} 什么 "$@"$ *.

  2. 或者,如果您不想使用数组,则需要使用 eval:

    bar() {
        local args=()
        for arg in "$@"
        do
            args="$args \"prefix $arg\""
        done
    
        eval foo $args
    }
    

关于bash - 构建包含空格的参数列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/411495/

相关文章:

css - 如何确保只能选择想要的文本?

java - 如何在 Mac bash 上从命令行运行 Gradle

linux - 在两个地方查找文件的位置 bash linux

ruby-on-rails - Capistrano & Bash : ignore command exit status

postgresql - 错误 : argument of HAVING must be type boolean, 未键入 double

powershell - dotnet efscaffold 无法识别的选项 '-t firstTable -t secondTable' - 传递存储在字符串中的参数

Python调用位置参数

c# - 如何从字符串中删除所有空白字符?

iphone - 通过空格将 1 个 NSString 分成两个 NSString

linux - 在linux bash中永久设置环境变量的问题