如何解决有没有办法在Linux中将花括号作为bash脚本的命令行参数
我想提供一个类似地图的结构作为bash脚本的参数。我尝试了以下方法,它们正在起作用。
1. bash src.sh b:\{x:1,y:2}
2. bash src.sh b:'{x:1,y:2}'
"{}" also works
在第一种方法上,当我在另一个脚本中使用命令时,在括号(\
内可能存在换行符的情况下,会弄乱。
bash src.sh b:\{x:1,\
y:2}
y:2} part is missing
第二种方法还不错,但是当换行符位于引号\
内时,它在参数内包含''
bash src.sh b:'{x:1,\
y:2}'
argument will be b:{a:1,\ b:2}
为什么我不能直接将{}
交给bash脚本?有没有更好的方法来赋予{}
或全新的方法来赋予上述类似地图的结构。
解决方法
为什么我不能直接将
{}
交给bash脚本?有没有更好的方法来赋予{}
或全新的方法来赋予上述类似地图的结构。
将bash用作brace expansion时,{
和}
都不会以特殊方式处理(除非您很不幸并且碰巧将它们组合成一个{{3 }}或parameter expansion)。在您的情况下,它们只是字符串中的普通字符-但为避免将来出现任何麻烦,请考虑在参数'
周围加以避免字符串内插。
给出此脚本:
for var in "$@"
do
echo ">$var<"
done
和此输入
b:\{x:1,\
y:2}
您得到的输出
>b:{x:1,<
>y:2}<
第一部分在$1
中,第二部分在$2
中的原因是,y
前面有空格,因此正常的参数拆分起作用了。在这种情况下,换行并不重要(它不是字符串的一部分)。如果您改为输入以下内容:
b:\{x:1,\
y:2}
您将获得以下输出:
>b:{x:1,y:2}<
如果您想将所有参数串联在一起,只需使用"$@"
:
var="$@" # or just var=$@
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。