Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parameters 手册中的“zsh数组参数”我不能完全理解。有人能举例说明这一点吗?_Parameters_Zsh - Fatal编程技术网

Parameters 手册中的“zsh数组参数”我不能完全理解。有人能举例说明这一点吗?

Parameters 手册中的“zsh数组参数”我不能完全理解。有人能举例说明这一点吗?,parameters,zsh,Parameters,Zsh,我唯一能理解的是$FOO[2,5]。但r、r、s、w选项我不清楚如何在实际问题中使用它们: “zsh”网站上说: 阵列参数 数组参数的值可以通过以下方式指定: 名称=值 可以使用下标选择数组的各个元素。[exp]形式的下标选择单个元素exp,其中exp是一个算术表达式,它将接受算术展开,就像它被$..包围一样。。。。元素从1开始编号,除非从零开始编号时设置了KSH_ARRAYS选项 []或[@]形式的下标计算为数组的所有元素;两者之间没有区别,除非它们出现在双引号内$foo[]的计算结果为$fo

我唯一能理解的是$FOO[2,5]。但r、r、s、w选项我不清楚如何在实际问题中使用它们:

“zsh”网站上说:

阵列参数

数组参数的值可以通过以下方式指定:

名称=值

可以使用下标选择数组的各个元素。[exp]形式的下标选择单个元素exp,其中exp是一个算术表达式,它将接受算术展开,就像它被$..包围一样。。。。元素从1开始编号,除非从零开始编号时设置了KSH_ARRAYS选项

[]或[@]形式的下标计算为数组的所有元素;两者之间没有区别,除非它们出现在双引号内$foo[]的计算结果为$foo[1]$foo[2]…,而$foo[@]的计算结果为$foo[1]$foo[2],以此类推

[exp1,exp2]形式的下标选择exp1到exp2范围内的所有元素。如果其中一个下标的计算结果为负数,例如-n,则使用数组末尾的第n个元素。因此,$foo[-3]是数组foo末尾的第三个元素,$foo[1,-1]与$foo[*]相同

也可以对非数组值执行下标,在这种情况下,下标指定要提取的子字符串。例如,如果FOO设置为foobar,那么echo$FOO[2,5]将打印ooba

可以在用于分隔参数名的大括号内使用下标,因此${foo[2]}相当于$foo[2]。如果设置了KSH_ARRAYS选项,则大括号形式是唯一可以工作的形式,否则不会对下标进行特殊处理

如果在赋值的左侧使用下标,则选定范围将替换为右侧的表达式

如果左括号或逗号后面紧跟着一个左括号,则匹配的右括号之前的字符串将被视为标志列表。目前了解的标志有:

e 此选项无效,仅为向后兼容而保留。 W 如果subscripted参数是标量,则此标志将使订阅基于每个字而不是字符工作。 s:字符串: 定义用于分隔与w标志一起使用的单词的字符串。 P 识别与后续s标志的字符串参数中的打印内置项相同的转义序列。 F 如果subscripted参数是标量,则此标志将使订阅以每行为单位而不是以字符为单位工作。这是pws的缩写:\n:。 R 如果给定该标志,则exp作为模式,如果参数是数组,如果参数是标量,或者如果参数是标量,则结果是第一个匹配的数组元素、子字符串或字,并且分别给出了w标志;注意,这就像给出一个数字:$foo[r??,3]和$foo[r??,rf*]work。 R 喜欢r,但给出最后一个匹配。 我 与r类似,但给出匹配的索引;这不能与第二个参数结合使用。 我 和我一样,但给出了最后一次匹配的索引。 n:expr:
如果与r、r、i或i组合,则如果expr的计算结果为n,则使它们返回第n个或第n个最后匹配项。

不确定引用的来源,因为该文本不会显示在链接的页面上。下面是一些正在使用的标志的示例:

# If the parameter subscripted is a scalar
foo="The quick brown fox jumps over the lazy dog"
echo $foo[2]
# => h       (the second character)
echo $foo[(w)2]
# => quick   (the second word)
echo $foo[(ws:fox:)2]
# =>  jumps over the lazy dog    (the second "word", but delimited by "fox", not space)
echo $foo[(wr)*az*]
# => lazy    (the first word that matches the pattern "*az*")
echo $foo[(wR)?????]
# => jumps   (the last word that matches the pattern "?????")
echo $foo[(wrn.2.)???]
# => fox     (the second three-letter word)
echo $foo[(wrin.2.)???]
# => 17      (the index of second three-letter word)

# If the parameter subscripted is an array
foo=("The quick brown fox" jumps "over the lazy dog")
echo $foo[1]
# => The quick brown fox    (The first element)
echo $foo[(r)*the*dog]
# => over the lazy dog      (The first element that matches the pattern "*the*dog")
对于更真实的问题,假设我有一个包含

DB_NAME=mydb
DB_USER=me
DB_PASS=not real password
DB_HOST=localhost
DB_PORT=5432
然后,这将在不使用外部实用程序(如grep、sed或awk)的情况下读取您的密码:


伟大的谢谢你对我的帮助!s:string:这给出了分隔单词的字符串,以便与w标志一起使用。分隔符字符:是任意的;见上文。->你能举例说明这种用法吗?所有内容都来自我在问题中提供的链接。zsh,第15章。参数它意味着$foo[ws:fox:2]相当于$foo[ws.fox.2]、$foo[wsfox2],甚至是echo$foo[wswfoxw2]。请不要使用最后一个这是你从哪里得到的诸如“ws”、“wR”、“wrn”之类的信息?因为我在网上找不到这个。提前谢谢,就在你的问题里。它不是ws;它是w和s:string:,这两个标志一起指定。w如果subscripted参数是标量,则此标志使订阅按每个字而不是字符工作。s:string:定义用于分隔与w标志一起使用的单词的字符串。s:string:定义用于分隔与w标志一起使用的单词的字符串。@SungwookKim:在zshparam手册页中。查找标题为“下标标志”的部分。
file=$(<.pass)                # read in the file contents
line=$file[(fr)DB_PASS=*]     # find the line (f) that matches pattern (r)
pass=$line[(ws:=:)2]          # get the second (2) segment (w) split by "=" (s:=:)