折叠:当 运行 带有参数的脚本时,列数无效
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"
当 运行使用包含命令替换的参数设置脚本时,我遇到了一个奇怪的行为。我想了解为什么会发生这种行为。脚本是:
#!/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"