我有一个变量:
❯ echo $numholds
409503
409929
409930
409932
409934
409936
409941
409942
409944
409946
我想做一个 for 循环,但是换行符不起作用:
❯ for num in $numholds; do
echo $num ,
echo New Item!
> done
409503
409929
409930
409932
409934
409936
409941
409942
409944
409946 ,
New Item!
这甚至发生在我设置IFS=$"\n \t"
. 我怎样才能使这项工作?
要在 zsh 中拆分换行符,请使用
f
参数扩展标志(f
用于linef
eed),它是以下内容的缩写ps:\n:
:您还可以使用
$IFS
-splitting (与其他类似 Bourne 的外壳相反),您必须使用语法zsh
明确要求参数扩展(看起来有点像一把剪刀):$=param
$=
你的变量是一个字符串,而不是一个数组。它恰好包含换行符是不相关的。您
for num in $numholds
将整个事物视为单个值,因为这就是您存储它的方式。简单的解决方法是使用
while
循环和<<<
here-string 构造来提供它:这基本上等同于丑陋的(请参阅此处了解为什么这是一个坏主意):
最后,您可能希望将变量设为数组:
您现在可以使用所需的构造: