附加 Echo

附加 Echo

我正在创建一个密码生成器,但是我无法正确附加密码。

这是我的脚本

i="0"
while [ $i -lt 5 ]
do
    echo -n '#' >> passwords.txt && openssl rand -hex 4 >> passwords.txt && echo -n '/' >> passwords.txt && echo -n 'X' >> passwords.txt
    i=$[$i+1]
done

输出

#b887e0d0
/X#7093289e
/X#2210cfcd
/X#fd175e1f
/X#0c18fc9e
/X

预期输出

#b887e0d0/Z
#7093289e/Z
#2210cfcd/Z
#fd175e1f/Z
#0c18fc9e/Z

我怎样才能做到这一点,以便它不会跳过第一行,并且它按该顺序运行每个命令并将写入密码 txt 文件作为预期的输出。

谢谢。

答案1

这应该可以:

for i in {1..5}; do
    printf '#%s/Z\n' "$(openssl rand -hex 4)"
done >passwords.txt

我用对 printf 的一次调用替换了对 echo 的多次调用。对 openssl 的调用包含在命令替换中会产生副作用,使行结尾消失,而换行符是示例中可见的错误放置的换行符的原因。

答案2

问题在于openssl“有帮助”并在随机字符串的末尾放置换行符。您可以通过管道将其删除tr

openssl rand -hex 4 | tr -d '\n'

相关内容