- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
list=(1 2 3)
for i in $list; do echo $i; done;
for i in $list[@]; do echo $i; done;
for i in $list[*]; do echo $i; done;
for i in ${list}; do echo $i; done;
for i in ${list[@]}; do echo $i; done;
for i in ${list[*]}; do echo $i; done;
for i in "${list[@]}"; do echo $i; done;
1
2
3
for i in "$list"; do echo $i; done;
for i in "${list}"; do echo $i; done;
for i in "$list[*]"; do echo $i; done;
for i in "${list[*]}"; do echo $i; done;
1 2 3
@
对比
*
?例如,我
know the difference between
"${list[@]}"
和
"${list[*]}"
,但我一直无法找到有关
$list
之间差异的直接答案。 ,
${list}
,
$list[@]
,
${list[@]}
,
$list[*]
, 和
${list[*]}
.当我可以做
$list
时,为什么我还要使用数组参数? ?
"$list"
当我想要一个字符串中的数组中的所有元素时?在那种情况下,我疯狂地
4 不同的选项:
"$list"
,
"${list}"
,
"$list[*]"
,
"${list[*]}"
.
最佳答案
一般来说,使用哪种取决于我们。但是深入研究为什么 zsh 允许编写这样的代码可能是值得的。
来自 zsh FAQ 文档:
1.2: What is it?
Zsh is a UNIX command interpreter (shell) which of the standard shells most resembles the Korn shell (ksh);
--- Chapter 1: Introducing zsh and how to install it, Z-Shell Frequently-Asked Questions
Chapter 2: How does zsh differ from...?
As has already been mentioned, zsh is most similar to ksh, while many of the additions are to please csh users.
...
2.1: Differences from sh and ksh
Most features of ksh (and hence also of sh) are implemented in zsh; problems can arise because the implementation is slightly different.
--- Chapter 2: How does zsh differ from...?, Z-Shell Frequently-Asked Questions
setopt ksh_arrays
看看发生了什么,也是。
Arrays are (by default) more csh-like than ksh-like: subscripts start at 1, not 0;
array[0]
refers toarray[1]
;$array
refers to the whole array, not$array[0]
; braces are unnecessary:$a[1]
==${a[1]}
, etc. Set theKSH_ARRAYS
option for compatibility.--- 2.1: Differences from sh and ksh, Z-Shell Frequently-Asked Questions
Q22. Why are the braces required with array references, e. g.
${x[1]}
?A22. It would be nice to do
$x[1]
, but the POSIX shell would expand$x
and then search for the file pattern resulting by concatenating[1]
. ksh is POSIX compatible.--- III SHELL PROGRAMMING QUESTIONS Q22, KSH-93 - Frequently Asked Questions
list=(a b c)
echo $list[1]
;# => "a[1]"
;# concatination of the first $list element and "[1]" string
;# rather than below!
echo ${list[1]} ;# => "b"
$list
中的任何一个,
${list}
,
$list[@]
,
${list[@]}
,
$list[*]
, 和
${list[*]}
在第一个例子中;它可以被认为是 zsh 的特性。
$x[1]
从另一个角度查看代码。至
$list[@]
或
$list[*]
.
$list
包含空值,
"${list[@]}"
因“
24. Empty argument removal”而异。
24. Empty argument removal
If the substitution does not appear in double quotes, any resulting zero-length argument, whether from a scalar or an element of an array, is elided from the list of arguments inserted into the command line.
--- 24. Empty argument removal, Rules, Expansion, zshparam(1)
@
对比
*
Q1. What is the difference between
*
and@
, for example, and ?A1. When used outside of
""
, they are equivalent. However, within double quotes,"$@"
produces one argument for each positional parameter, and"$*"
produces a single argument. Note that"$@"
preserves arguments lists, whereas$*
may not unless both word splitting and pathname expansion are disabled.--- III SHELL PROGRAMMING QUESTIONS Q1, KSH-93 - Frequently Asked Questions
A subscript of the form
[*]
or[@]
evaluates to all elements of an array; there is no difference between the two except when they appear within double quotes.
"$foo[*]"
evaluates to"$foo[1] $foo[2] ..."
, whereas"$foo[@]"
evaluates to"$foo[1]" "$foo[2]" ...
....
When an array parameter is referenced as
$name
(with no subscript) it evaluates to$name[*]
,
"$list"
与其他人
"$list"
,
"${list}"
和
"$list[*]"
可能意味着它只会对
$list
的第一个元素进行一些操作。 (以及为后者连接
"[*]"
的结果)而不是列表/数组引用。
list=(1 2 '' 3) # XXX: added an empty entry to check the difference
test-list-dq () {
echo "$1"
local i=
echo '$list:'; for i in $list; do echo $i; done;
echo '$list[@]:'; for i in $list[@]; do echo $i; done;
echo '$list[*]:'; for i in $list[*]; do echo $i; done;
echo '${list}:'; for i in ${list}; do echo $i; done;
echo '${list[@]}:'; for i in ${list[@]}; do echo $i; done;
echo '${list[*]}:'; for i in ${list[*]}; do echo $i; done;
echo '"${list[@]}":'; for i in "${list[@]}"; do echo $i; done;
}
test-list-nq () {
echo "$1"
local i=
for i in "$list"; do echo $i; done
for i in "${list}"; do echo $i; done
for i in "$list[*]"; do echo $i; done
for i in "${list[*]}"; do echo $i; done
}
echo "*double quotes"
test-list-dq "*default"
() {
setopt localoptions ksharrays no_nomatch
test-list-dq "*ksharrays on"
}
echo "*no quotes"
test-list-nq "*default"
() {
setopt localoptions ksharrays no_nomatch
test-list-nq "*ksharrays on"
}
*double quotes
*default
$list:
1
2
3
$list[@]:
1
2
3
$list[*]:
1
2
3
${list}:
1
2
3
${list[@]}:
1
2
3
${list[*]}:
1
2
3
"${list[@]}":
1
2
3
*ksharrays on
$list:
1
$list[@]:
1[@]
$list[*]:
1[*]
${list}:
1
${list[@]}:
1
2
3
${list[*]}:
1
2
3
"${list[@]}":
1
2
3
*no quotes
*default
1 2 3
1 2 3
1 2 3
1 2 3
*ksharrays on
1
1
1[*]
1 2 3
关于zsh - 为什么要使用 zsh 数组参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51411577/
简而言之:我想从可变参数模板参数中提取各种选项,但不仅通过标签而且通过那些参数的索引,这些参数是未知的 标签。我喜欢 boost 中的方法(例如 heap 或 lockfree 策略),但想让它与 S
我可以对单元格中的 excel IF 语句提供一些帮助吗? 它在做什么? 对“BaselineAmount”进行了哪些评估? =IF(BaselineAmount, (Variance/Baselin
我正在使用以下方法: public async Task Save(Foo foo,out int param) { ....... MySqlParameter prmparamID
我正在使用 CodeGear RAD Studio IDE。 为了使用命令行参数测试我的应用程序,我多次使用了“运行 -> 参数”菜单中的“参数”字段。 但是每次我给它提供一个新值时,它都无法从“下拉
我已经为信用卡类编写了一些代码,粘贴在下面。我有一个接受上述变量的构造函数,并且正在研究一些方法将这些变量格式化为字符串,以便最终输出将类似于 号码:1234 5678 9012 3456 截止日期:
MySql IN 参数 - 在存储过程中使用时,VarChar IN 参数 val 是否需要单引号? 我已经像平常一样创建了经典 ASP 代码,但我没有更新该列。 我需要引用 VarChar 参数吗?
给出了下面的开始,但似乎不知道如何完成它。本质上,如果我调用 myTest([one, Two, Three], 2); 它应该返回元素 third。必须使用for循环来找到我的解决方案。 funct
将 1113355579999 作为参数传递时,该值在函数内部变为 959050335。 调用(main.c): printf("%d\n", FindCommonDigit(111335557999
这个问题在这里已经有了答案: Is Java "pass-by-reference" or "pass-by-value"? (92 个回答) 关闭9年前。 public class StackOve
我真的很困惑,当像 1 == scanf("%lg", &entry) 交换为 scanf("%lg", &entry) == 1 没有区别。我的实验书上说的是前者,而我觉得后者是可以理解的。 1 =
我正在尝试使用调用 SetupDiGetDeviceRegistryProperty 的函数使用德尔福 7。该调用来自示例函数 SetupEnumAvailableComPorts .它看起来像这样:
我需要在现有项目上实现一些事件的显示。我无法更改数据库结构。 在我的 Controller 中,我(从 ajax 请求)传递了一个时间戳,并且我需要显示之前的 8 个事件。因此,如果时间戳是(转换后)
rails 新手。按照多态关联的教程,我遇到了这个以在create 和destroy 中设置@client。 @client = Client.find(params[:client_id] || p
通过将 VM 参数设置为 -Xmx1024m,我能够通过 Eclipse 运行 Java 程序-Xms256M。现在我想通过 Windows 中的 .bat 文件运行相同的 Java 程序 (jar)
我有一个 Delphi DLL,它在被 Delphi 应用程序调用时工作并导出声明为的方法: Procedure ProduceOutput(request,inputs:widestring; va
浏览完文档和示例后,我还没有弄清楚 schema.yaml 文件中的参数到底用在哪里。 在此处使用 AWS 代码示例:https://github.com/aws-samples/aws-proton
程序参数: procedure get_user_profile ( i_attuid in ras_user.attuid%type, i_data_group in data_g
我有一个字符串作为参数传递给我的存储过程。 dim AgentString as String = " 'test1', 'test2', 'test3' " 我想在 IN 中使用该参数声明。 AND
这个问题已经有答案了: When should I use "this" in a class? (17 个回答) 已关闭 6 年前。 我运行了一些java代码,我看到了一些我不太明白的东西。为什么下
我输入 scroll(0,10,200,10);但是当它运行时,它会传递字符串“xxpos”或“yypos”,我确实在没有撇号的情况下尝试过,但它就是行不通。 scroll = function(xp
我是一名优秀的程序员,十分优秀!