ZSH 将值视为文字字符串

ZSH treat value as literal string

作为我正在设置的 ZSH 主题的一部分,我需要从各种可执行目录(即 /usr/bin/usr/local/bin 等)获取程序列表,然后将其传递给到数组。

目前,我只是将一堆 ls 命令转储到一个文件中,然后从那里我将该文件的每一行读取到一个数组中。

问题是,文件中的第一行是 [,当我的 ZSH 配置试图通过 set -A $progarr $progline 将其设置为数组时(其中 $progarr是数组,$progctr 是处理文件读取的循环内的迭代器)我收到错误 /home/user/.zshrc:57: not an identifier: [

有什么方法可以告诉脚本“只将任何 $progline 视为字符串,因此不要尝试以任何方式解释它”?

谢谢,

直接的问题是您使用了 $progarr 而不是 progarr —— 这意味着使用了 progarr 的第一个元素的值,除了它是空的点,所以没有提供数组名称。本质上,该命令扩展自:

set -A $progarr $progline

set -A [

[ 不是数组的有效名称,因此会出现错误。

其他问题:您似乎只是将数组设置为 $progline(替换其以前的内容)而不是追加它。还有 parsing ls's output is generally problematic.

我建议使用通配符直​​接获取列表:

set -A progarr /bin/* /sbin/* /usr/bin/* /usr/sbin/*    # Create array of commands
progarr=("${progarr[@]##*/}")    # Trim off the paths (e.g. "/bin/ls" -> "ls")