【问题标题】:Bash- dealing with commands as passing parametersBash - 将命令作为传递参数处理
【发布时间】:2015-05-29 22:12:39
【问题描述】:

所以问题是我已经为密码生成器和验证器创建了一个脚本。它要求用户输入密码并检查规格。但是当输入包含以下内容时问题就开始了 - [, ], (, ), &,我收到错误消息,或者 &- 进程在后台启动,提示我取消运行脚本。

我如何以某种方式将输入读取为字符串而不是包含命令/其他字符的字符串以给出错误?

我不能在这里发布代码,因为这是一个学校项目。

【问题讨论】:

  • 你能至少发布代码来演示问题吗?也就是说,您可能没有引用参数扩展。
  • 发布一个演示问题的代码,而不是你的学校项目。
  • 没有看到你的代码很难提供任何帮助。
  • 好的,所以我输入 ./passwordgen Jh7& 它返回 [1] 9329。如果是 ./passwordgen jdhh77( - 它给出了一个关于 '(' 意外令牌的错误。$variable=$1 是什么我设置,然后我使用 $variable 来检查条件。
  • $variable="$1" 是错误的。试试variable="$1"。但是,如果您发布一些代码,它会让那些试图帮助您的人更加轻松。正如 jm666 所说,我们不需要看你的整个学校项目,只需发布​​一个小示例程序来说明你的问题。

标签: regex bash shell parameters


【解决方案1】:

参考我在回复your last question时写的代码,看到我引用了chartypes函数的arg吗?

chartypes 'This is A $24 @test.'

当给它一个已经存储在变量中的字符串时,正如 chepner 所说,您需要使用双引号 " 引用变量,如下所示:

s='A string with various "special" chars: [ ] ( ) & !'
chartypes "$s"

您需要在此处使用双引号,以便 bash 正确扩展 $s。如果您使用单引号 ',那么文字 $s 将被传递给函数。

【讨论】:

  • 我尝试使用 $variable="$1" 仍然无法正常工作。顺便说一句,我没有尝试将 $1 提供给函数,因为我没有使用您的 chartype/variations。只需使用简单的 if-else 来检查字符串中的模式,除了我提到的部分之外,它工作得很好。
  • @BruceStrafford 我只是将我的 chartypes 函数用作您已经熟悉的方便的示例代码。
【解决方案2】:

所以我输入 ./passwordgen Jh7& 它返回 [1] 9329。如果是 ./passwordgen jdhh77( - 它给出了一个关于 '(' 意外令牌的错误。

由于在您的passwordgen 脚本启动之前命令行已被清楚地解释,因此您的脚本中的任何内容都不能改变这种解释。因此,如果脚本的参数包含 shell 的特殊字符,则必须引用它。

./passwordgen 'Jh7&'
./passwordgen 'jdhh77('

【讨论】:

    猜你喜欢
    • 2016-05-31
    • 2019-03-26
    • 2012-03-25
    • 2021-11-25
    • 2011-09-06
    • 2018-01-14
    • 2013-07-15
    • 2015-04-11
    • 2018-07-23
    相关资源
    最近更新 更多