我想为bash读取函数提供输入,该函数同时包含单引号和双引号,然后将其与存储的值进行比较。
此脚本在启动时会随机询问一个问题,以查找我要记住的某些命令的正确语法。但是其中一些命令包含单引号和双引号,那么如何使用bash处理呢?
#!/bin/bash
echo "What is the secret string?"
read secret
if [ "$secret" = "123" ]
then
echo "You're Awesome!!!"
else
echo "You're memory sucks!!"
fi
因此,如果$ question是“嗨,我的名字是'Ed'”,并且在同一输入中包含单引号和双引号,那么我该如何处理这种魔术?
答案 0 :(得分:0)
没有魔法可以工作。用户输入的内容在您的脚本中永远不会成为语法-绝不会被评估为代码-因此它可以包含任何内容。 *
* NUL字符(\ 0)本身除外,因为它是字符串终止符。
答案 1 :(得分:0)
read
包含引号的字符串不需要任何特殊要求,但是我会使用read -r
来防止它与反斜杠混淆。您还可以使用-p
选项来提供提示(而不是echo
单独提供提示):
read -r -p "What is the secret string? " secret
这里唯一棘手的事情是指定要比较的字符串。一种选择是将其表示为双引号字符串,并用反斜杠对其中的双引号进行转义。您还需要以相同的方式转义任何美元符号,反引号或反斜杠:
if [ "$secret" = "dq: \", sq: ', dollar: \$" ]
then
echo "You're Awesome!!!"
else
echo "Your memory sucks!!"
fi
这是上面代码的示例运行:
$ ./secrettest.sh
What is the secret string? dq: ", sq: ', dollar: $
You're Awesome!!!
答案 2 :(得分:0)
我的问题是关于在代码中指定Gordon提到的字符串,而不是从输入中读取它。我在原件中没有使用双引号和单引号,这就是为什么它不起作用的原因。 所以
if [ "$secret" = "command \'with \"options\"\'" ]
应该是这个
if [ "$secret" = "command 'with \"options\"'" ]
谢谢大家。