我正在编写以下函数:
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版本上。
答案 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