已关闭。此问题需要更多focused。它目前不接受回答。
**希望改进此问题?**更新问题,使其仅针对editing this post的一个问题。
6天前关门了。
Improve this question的
我有一个要求,其中我有多个值在一个文件和8个数组包含数值。举例来说:
Array1=(1 2 3 4 5)
Array2=(6 7 8 9 10)
字符串
文件具有值3和9。因此,在第一种情况下,它应该返回Array1,在第二种情况下,它应该返回Array2。另外,我想将结果存储在另一个文件中,该文件的值后跟包含该值的数组名称。
无法找到任何解决方案。
2条答案
按热度按时间sxissh061#
如果你的bash足够近:
字符串
说明:
declare -n arr="$a"
声明了一个nameref,一种别名。如果在a
的值为Array1
时执行,则arr
成为Array1
的同义词。printf '%s\n' "${arr[@]}"
将数组arr
中的每个条目打印在单独的一行上。<(command)
是一个进程替换,运行该命令,其输出被环境视为一个文件。在我们的例子中,数组的内容被视为每行一个条目的文件。grep -oFf file1 file2
采用file1
(-f file1
)中的模式进行搜索,在我们的例子中,在进程替换中,将它们视为纯文本字符串,而不是正则表达式(-F
),并仅输出匹配的部分(-o
)。grep
如果模式匹配,则以状态0退出,否则以非零状态退出。由于0退出状态被认为是布尔值true,因此只有当grep
在file
中找到其中一个模式时,printf '(in %s)\n'
才会执行打印数组名称的printf '(in %s)\n'
,这要归功于&&
操作符(AND)。演示(输出前缀为
-|
):型
ufj5ltwl2#
试试这个Shellcheck-clean pure Bash代码:
字符串
|| [[ -n $val ]]
是为了支持最后一行没有正确终止的输入文件。看到我的文本文件坏了!他们缺少最后的新台词!BashFAQ/001 (How can I read a file (data stream, variable) line-by-line (and/or field-by-field)?)的部分。${!aref}
的解释,请参见What does "${!var}" mean in shell script?。echo
对变量数据不可靠,所以我使用printf
来产生输出。请参阅Why is printf better than echo?的公认且优秀的答案。