折叠:当 运行 带有参数的脚本时,列数无效

fold: invalid number of columns when running script with arguments

当 运行使用包含命令替换的参数设置脚本时,我遇到了一个奇怪的行为。我想了解为什么会发生这种行为。脚本是:

#!/bin/bash

# MAIL=
# USER=
PASSWORD=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w ${1:-20} | head -n 1);
echo "$PASSWORD"

然后我 运行: ./test.sh mail user, 我得到错误: fold: invalid number of columns: ‘mail’ 并且没有生成密码。

如果我不传递参数或不生成密码,它就可以正常工作。

更新(用于理解行为)

我想我已经知道发生了什么: 当 运行 使用两个参数连接脚本时, and 具有传递的值。例子: ./test.sh arg1 arg2 -> arg1 -> arg2

在脚本中使用管道时,仍会传递原始参数,因此如果您有两个参数作为输入,您会将管道输出插入第三个位置</code>。</p> <ul> <li><code> -> arg1

  • -> arg2
  • -> piped output 所以一个可行的解决方案是:
  • PASSWORD=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w ${3:-20} | head -n 1);
    

    但是如果您改变输入参数,它将不起作用。因此,最好的解决方案是@KamilCuk 建议的:

    PASSWORD=$(< /dev/urandom tr -dc 'a-zA-Z0-9' | fold -w 20 | head -n 1);
    

    如果您不想将第一个脚本参数传递给 fold,则不要在其中使用 </code>。</p> <pre><code>PASSWORD=$(< /dev/urandom tr -dc 'a-zA-Z0-9' | fold -w 20 | head -n 1); # ^^ - pass the number, not echo "$PASSWORD"