Shell ZSH仅在数组的第一项上循环

Shell ZSH仅在数组的第一项上循环,shell,unix,scripting,zsh,shebang,Shell,Unix,Scripting,Zsh,Shebang,当我执行时,我不会得到循环超过第二个值10.138.0.91,如下所示 #/bin/zsh servers=('10.138.0.8' '10.138.0.91') for srv in $servers; do echo "Checking health for " $srv echo "==========================================" echo mntr | nc $srv 2181 done 为什么?因为您的脚本没有被zsh执行

当我执行时,我不会得到循环超过第二个值10.138.0.91,如下所示

#/bin/zsh
servers=('10.138.0.8' '10.138.0.91')

for srv in $servers; do
   echo "Checking health for " $srv
   echo "=========================================="
   echo mntr | nc $srv 2181 
done

为什么?

因为您的脚本没有被zsh执行。修复:
#/bin/zsh

为什么你的脚本会被执行,即使没有shebang行?因为:

  • 内核无法识别可执行格式,因此放弃(系统调用返回
    ENOEXEC
  • 试图执行文件
    /healthcheck/zookeeper.sh
    的shell打开文件并注意到它看起来像是一个脚本文本,从而做出响应。传统上,它调用
    /bin/sh
    来执行脚本。对于
    /bin/sh
    ,第一行只是一条普通的注释

  • 显然,
    /bin/sh
    在您的机器上是bash或ksh。数组分配使用与zsh相同的语法工作,但对数组的引用没有-在ksh/bash语法中,您必须编写
    “${servers[@]}”
    (以
    “$@”
    为模型)来枚举数组的元素。

    ,因为您的脚本不是由zsh执行的。修复:
    #/bin/zsh

    为什么你的脚本会被执行,即使没有shebang行?因为:

  • 内核无法识别可执行格式,因此放弃(系统调用返回
    ENOEXEC
  • 试图执行文件
    /healthcheck/zookeeper.sh
    的shell打开文件并注意到它看起来像是一个脚本文本,从而做出响应。传统上,它调用
    /bin/sh
    来执行脚本。对于
    /bin/sh
    ,第一行只是一条普通的注释
  • 显然,
    /bin/sh
    在您的机器上是bash或ksh。数组分配使用与zsh相同的语法工作,但对数组的引用没有使用-在ksh/bash语法中,您必须编写
    “${servers[@]}”
    (以
    “$@”
    为模型)来枚举数组的元素。

    :)这一行在我的shell中变灰,因此我错过了它。最严重的错误是最明显的!谢谢Gilles!:)这条线在我的壳里变灰了,所以我错过了。最严重的错误是最明显的!谢谢Gilles!
    [devops@devops]~% ./healthcheck/zookeeper.sh  
    Checking health for  10.138.0.8
    ==========================================
    zk_version      3.4.10-39d3a4f269333c922ed3db283be479f9deacaa0f, built on 03/23/2017 10:13 GMT
    zk_avg_latency  0
    zk_max_latency  0
    zk_min_latency  0
    zk_packets_received     9
    zk_packets_sent 8
    zk_num_alive_connections        1
    zk_outstanding_requests 0
    zk_server_state follower
    zk_znode_count  4
    zk_watch_count  0
    zk_ephemerals_count     0
    zk_approximate_data_size        27
    zk_open_file_descriptor_count   28
    zk_max_file_descriptor_count    4096