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")
作为我正在设置的 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")