【问题标题】:Are there any potential pitfalls in using the @ character for a key in an associative array in bash?在 bash 的关联数组中使用 @ 字符作为键是否有任何潜在的缺陷?
【发布时间】:2013-09-18 16:22:29
【问题描述】:

我正在编写一个 bash 脚本,用于自动创建一些基本的测试输入文件。

由于数据的结构方式,我的脚本中有一部分我想在关联数组的某些键中使用@ 字符。

从粗略的回声测试来看,似乎没有任何问题:

$ declare -A arr
$ arr[1]=hello
$ arr[2]=world
$ arr[@1]=foo
$ arr[@2]=bar
$ for var in "${!arr[@]}"; do echo "key: ${var}, value: ${arr[$var]}" ; done
key: @1, value: foo
key: 1, value: hello
key: @2, value: bar
key: 2, value: world

但由于@special character,我想知道这种密钥分配是否安全,如果不安全,我能做些什么让它更安全?

【问题讨论】:

  • 除非你在它前面添加 $ 字符,就像任何文字字符一样,我猜不是。危险和其他角色一样。 @ 单独使用时也很特殊,除了在特殊模式中是另一个(@()),但我认为它不适用于分配。此外,在扩展时,您可以引用它。大多数情况下,arr["key"]=value 格式是首选。
  • 此外,如果您在使用这些特殊字符时遇到任何问题,您可以简单地用单引号将它们括起来'<chars>',以防止参数扩展。
  • 谢谢大家。我不知道引用的语法是首选;为了安全起见,我会这样做。

标签: bash special-characters associative-array key-value


【解决方案1】:

下,使用@ 作为关联数组的键名的一部分没有问题。

在转换为 base64 时,Bash 使用 at @下划线 _ 作为 字母数字,按以下顺序:

0..9 a..z A..Z @ _

$ echo {0..9} {a..z} {A..Z} @ _

试试这个:

$ echo $((64#10))
64
$ echo $((64#_))
63
$ echo $((64#@))
62
$ echo $((64#Z))
61
$ echo $((64#A))
36
$ echo $((64#z))
35
$ echo $((64#a))
10

所以在 下,这样就可以了。

备注

但警告:如果您的脚本成为应用程序 对于开发语言可能是一个不太好的选择。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-11
    • 2012-04-03
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多