在bash脚本中连接输入

zpe*_*esk 4 unix linux bash shell

我想连接传递给我的bash脚本的所有参数,除了标志.

例如,如果脚本接受如下输入:

./myBashScript.sh -flag1 exampleString1 exampleString2
Run Code Online (Sandbox Code Playgroud)

我希望结果是"exampleString1_exampleString2"

我可以为预定义数量的输入(即2)执行此操作,但是如何为任意数量的输入执行此操作?

Tyi*_*ilo 10

function concatenate_args
{
    string=""
    for a in "$@" # Loop over arguments
    do
        if [[ "${a:0:1}" != "-" ]] # Ignore flags (first character is -)
        then
            if [[ "$string" != "" ]]
            then
                string+="_" # Delimeter
            fi
            string+="$a"
        fi
    done
    echo "$string"
}

# Usage:
args="$(concatenate_args "$@")"
Run Code Online (Sandbox Code Playgroud)

  • @JoSo他清楚地说他正在使用bash. (2认同)

mvd*_*vds 3

这是一个丑陋但简单的解决方案:

echo $* | sed -e "s/ /_/g;s/[^_]*_//"
Run Code Online (Sandbox Code Playgroud)