【发布时间】:2021-03-19 07:11:51
【问题描述】:
我的脚本前一部分有一个变量,该变量是 greped/sed/cut/sort/uniq 从前一个脚本的多行输出到我需要的,n 数量的数字数据
echo "$array"
12345
54321
01234
据我了解,我可以将这一列数字视为一个数组
项目的数量可以从只有 1 个到可能多达 6 个不等。我已经验证没有空格可能会丢掉东西。
从这里我尝试
for element in "{array[@]}"; do
foo $anothervar "$element"
bar $anothervar "$element"
done
但我最终得到了变量中的所有值。
foo $anothervar 12345 54321 01234
(请注意,$anothervar 仅用于演示目的,它实际上是 $1,因此该 var 的 shell 扩展 不一定是问题)
等等。如果我
#with double quotes
echo "$element"
12345
54321
01234
#without quotes
echo $element
12345 54321 01234
所以我不能对这些数据做任何迭代。我可以将此变量视为一个数组并且必须对 var 执行另一个操作,然后才能将其输入到 for 循环,这是我的错误吗?
我的期望
foo $anothervar "$element"
*output of $anothervar 12345*
bar $anothervar "$element"
*output of $anothervar 12345*
foo $anothervar "$element"
*output of $anothervar 54321*
bar $anothervar "$element"
*output of $anothervar 54321*
etc etc
这是 AIX 上的 ksh88,根据我的研究,这应该可以工作,除非可能涉及 ksh88 与更高版本?我对数组很陌生,但对 shell 脚本并不陌生,尽管我几乎不会称自己为专家。提前感谢您提供的任何帮助。
【问题讨论】:
-
您使用的是哪个,
var=...或array=( ... ... ...)或 ??编辑您的 Q 以显示一组完全可测试的数据,以及您所需的输出/操作(是的,您已经接近了)。我会尝试for elem in ${var[@]} ; do...`(没有dbl-quotes)。祝你好运。 -
您已经在 3 个不同的变量中显示了数据 ...
$var(不是数组)...array[@](看起来像数组引用,但不知道array[@]中的实际内容) ...$element(不是数组);请清理您帖子中的不一致之处;回到包含数据的单个变量后,将typeset -p <variable_name>的输出添加到您的问题中,以便我们准确地查看变量中的内容及其结构 -
感谢您指出这一点。我正在尝试从专有代码制作通用 sn-ps 以提出问题
-
将您的代码复制/粘贴到shellcheck.net 并修复标记的所有错误。请务必将
#!/bin/ksh或#!/bin/ksh93` 作为第一行。用你最好的代码和所需的输出更新你的 Q。祝你好运。 -
换句话说:请提供minimal reproducible example