Bash传递参数以单引号或双引号起作用

时间:2019-12-22 13:18:06

标签: bash

我正在编写以下函数:

add() 
{
    echo "$@"
    for item in "$@"; do
        case "$item" in 
            *=* ) echo "$item" ;;
        esac
    done
}

旨在致电add first="first option" second="second"并获得:

first="first option"
second="second"

因此,每个参数都应使用空格和引号传递。但是,目前函数echo如下:

first=first
second=second

因此,没有引号,first中的第二个单词也被切掉。 我想念什么?

我的bash版本 GNU bash, version 5.0.11(1)-release (x86_64-apple-darwin17.7.0)

已解决

代码正常运行,我的终端设置在另一个旧的bash版本上。

2 个答案:

答案 0 :(得分:1)

here所述:

  

用双引号('“')引起来的字符将保留引号中所有字符的文字值,但'$','`','\'除外,并且在启用历史记录扩展功能时,'! '。反斜杠仅在其后跟以下字符之一时保留其特殊含义:'$','`','“','\'或换行符。

(只需将字符串放在方括号中)

这种方式可以提供所需的结果:

add "first=\"first option\"" "second=\"second\""

答案 1 :(得分:1)

当我在test.sh中放置以下内容时

add() 
{
    echo "$@"
    for item in "$@"; do
        case "$item" in 
            *=* ) echo "$item" ;;
        esac
    done
}
add first="first option" second="second" 

并运行

bash test.sh

我知道了

first=first option second=second
first=first option
second=second