作为我正在设置的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
(替换其以前的内容(,而不是附加它。解析ls
的输出通常是有问题的。
我建议使用通配符直接获取列表:
set -A progarr /bin/* /sbin/* /usr/bin/* /usr/sbin/* # Create array of commands
progarr=("${progarr[@]##*/}") # Trim off the paths (e.g. "/bin/ls" -> "ls")