如何使用 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
我是 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