我尝试在脚本中使用变量来存储包含$
的字符串,并将该字符串作为命令的一部分进行未修改,其用法指定其参数应为单个引号。
这非常有效:
./mycommand -a 1 --arg='$a$a'
在剧本中,我试图按如下方式编写:
args='$a$a'
./mycommand -a 1 --arg="'$args'"
在这种情况下,命令不接受它传递的有效语法。可能有什么不对?
补充编辑:这个脚本是运行hashcat,密码破解程序。我认为它需要--left-rule='$a$a'
和--right-rule='$b$b'
的单引号,特别是如果规则中有任何空格。
答案 0 :(得分:1)
双引号内的单引号不会阻止扩展;他们是字面字符。比较:
$ a=5
$ echo "'$a$a'"
'55'
由于您只想将文字字符串$a$a
作为参数传递,因此引用参数赋值就足够了;不需要额外的单引号:
args='$a$a' # The literal string $a$a
./command -a $iter --arg="$args" # $args expands to $a$a; no further expansion is attempted.