【问题标题】:Creating a custom random variable创建自定义随机变量
【发布时间】:2019-11-26 03:18:04
【问题描述】:

我想创建一个可以像 $RANDOM 一样调用的自定义变量或命令,但用于字符串。我有一个使用 /dev/urandom 创建随机字符串的脚本。每次运行脚本时,该脚本都会生成一个随机生成的字符串。

#!/bin/bash

rando=$(head -100 /dev/urandom | tr -dc a-zA-Z0-9 | fold -w 15 | head -1)

echo $rando

如果我创建一个调用脚本的别名或环境变量,它只会产生随机字符串的一种变体,直到创建新的 bash 会话。我怎样才能使它在同一个 bash 会话中创建随机字符串的新变体?

【问题讨论】:

  • 在您的.bashrc 中将其包装在function 中。然后每次调用它,代码都会运行。
  • 嗯?变量$rando 在您更改之前当然是相同的,但是再次调用dd 等每次都会创建一个新值。或者你是在问如何围绕这段代码制作一个函数?
  • RANDOM 是一个特殊的内置参数;你不能定义你自己的变量,每次你展开它时它的值都会改变。
  • 这也可能有效:tr -dc a-zA-Z0-9 </dev/urandom | head -c 15
  • 像@JNevill 的魅力一样工作。这完成了我想做的事情。谢谢

标签: bash random


【解决方案1】:

正如 JNevill 所说,您可以将它作为一个函数放在您的 bash 配置文件中:

function RANDOM(){
    rando=$( head -100 /dev/urandom | tr -dc a-zA-Z0-9 | fold -w ${1:-15} | head -1 )
    echo $rando
}

RANDOM
RANDOM 4
RANDOM 40

输出

17oxDRkl2O1c9iz
vfgZ
4xlVNyINrBj8XT04nkQWIVOTHAV51eVxtVNEyRW0

我添加了一个可选的第一个参数,因此您也可以控制字符串的长度。

【讨论】:

  • 这正是我想要完成的,谢谢!所以这是可行的,因为它每次都调用函数来创建字符串,而不是在 bash 启动时由脚本声明的变量,对吧?那么为什么调用脚本的别名不起作用呢?
  • 我不确定你的实际实现。但是对于您所描述的,您似乎将环境变量与别名混淆了。如果您这样做:export RANDOM=$(SOME COMMAND CALL HERE) RANDOM 的值将始终相同。而如果你创建一个别名,你总是会得到一个正在执行的实际命令。无论如何,我几乎总是最终使用函数而不是别名。代码可以更复杂,更容易阅读。因此,如果有疑问,我建议大多数时候默认使用函数并避免混叠。
  • 开始在我的脚本中更多地使用函数,因为它们确实使一切看起来更干净。感谢您的洞察力,将您的答案标记为解决方案。 :)
  • 我建议通过删除rando 变量和echo 来简化这一点——让管道直接产生输出。
猜你喜欢
  • 2015-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-23
  • 1970-01-01
  • 2012-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多