如何使用 for 循环加密列表 ZSH 脚本中的每个名称

How to encrypt every name in a list ZSH scripting using a for loop

我是 zsh 脚本的新手,我想知道是否可以使用 sha256sum 函数来加密列表中的每个值。

这是我目前尝试过的方法:

#!/bin/zsh

filenames=`cat filenames.txt`
output='shaNames.txt'

for name in $filenames
do
    echo -n $name | sha256sum >> $output
done

我要完成的是加密列表中的每个名称并将其附加到新的文本文件。

如有任何关于我做错了什么的建议,我们将不胜感激。

对于可能需要相同内容的任何人。我做错的是将文件中的值分配给单个字符串变量而不是列表。

要更正这一点,必须使用:

filenames=(`cat filenames.txt`)

括号表示列表或数组存储在文件名变量中。

您正在将 cat filenames.txt 的输出分配给一个多行变量。然后 for 循环将只在内容上循环一次。 你想要做的是例如:

for name in $(cat filenames.txt)
do
echo -n "$name" | sha256sum >> "$output"
done 

请注意,虽然您仍然可以使用它们,但 backticks are deprecated 支持 $(somecommand)

另请注意,您应始终将变量放在双引号中,因为它们可能包含 spaces。

如果您的文本文件中有一行包含 space,您的方法无论如何都会失败。 您可以改用以下内容:

while read name
do
echo -n "$name" | sha256sum >> "$output"
done < filenames.txt