如何避免将字符串的一部分称为命令?

时间:2017-08-07 21:21:27

标签: bash

我使用命令行参数运行文件: samplebash.bsh fakeusername fakepassword&123

.bsh文件:

echo "Beginning script..."
argUsername='$1'
argPassword='$2'
protractor indv.js --params.login.username=$argUsername --params.login.password=$argPassword

输出:

  

开始脚本......

     

123:找不到命令

问题:出于某种原因,它解释了&从密码作为命令的符号,我该如何避免这种情况?

1 个答案:

答案 0 :(得分:7)

问题不会发生在您的脚本中,它会在原始命令行中发生。 &是一个命令终止符,它指定前面的命令应该在后台执行。所以你的命令相当于:

samplebash.bsh fakeusername fakepassword &
123

您需要引用参数以防止shell解释特殊字符。

samplebash.bsh fakeusername 'fakepassword&123'

此外,您不应像在分配中那样在变量周围放置单引号,以防止变量被扩展。所以它应该是:

argUsername=$1
argPassword=$2

在命令中使用变量时,应该在变量周围加上双引号,以防止解释通配符和空格。

protractor indv.js --params.login.username="$argUsername" --params.login.password="$argPassword"

作为一般规则,除非您知道不需要,否则应始终在变量周围加上双引号。