将字符与报价或单引号进行比较

时间:2017-12-14 03:14:31

标签: bash shell unix compare

我想比较一个字符是否等于引用或单引号,但似乎没有任何效果......

我尝试过分配变量并比较

QUOTE=$(echo -e "\042")
if [[ "$CHAR" == "$QUOTE" ]]

由于我是一名初学者,我还在if语句中尝试了以下任何一项内容:

if [ "$CHAR" = "/"" ]
if [ "$CHAR" = '"' ]
if [ "$CHAR" = $'\"' ]

我尝试的最后一个,因为它在尝试与新行(如

)进行比较时起作用
[ "$CHAR" = $'\n' ]

我也尝试过双括号[[...]]和双等号==因为我不确定何时使用它们但没有运气。

坐了2个小时试图找到解决方案没有任何进展,请帮忙......

2 个答案:

答案 0 :(得分:2)

测试双引号:

if [ "$char" = '"' ]; then

要测试单引号,请使用:

if [ "$char" = "'" ]; then

除了

不要将所有大写字母用于变量名称。系统使用所有大写字母作为名称,并且您不想意外覆盖其中一个大写。

答案 1 :(得分:2)

其中三个用于将字符与双引号进行比较,而最后一个在语法上无效(因为它使用"/""而不是"\"")。解决这个问题,在这里它们都是:

#!/bin/bash
CHAR='"'

QUOTE=$(echo -e "\042")
if [[ "$CHAR" == "$QUOTE" ]]
then
  echo "Method 1 works"
fi

if [ "$CHAR" = "\"" ]
then
  echo "Method 2 works"
fi

if [ "$CHAR" = '"' ]
then
  echo "Method 3 works"
fi

if [ "$CHAR" = $'\"' ]
then
  echo "Method 4 works"
fi

运行时:

$ chmod +x myscript && ./myscript
Method 1 works
Method 2 works
Method 3 works
Method 4 works

为什么你认为他们不工作的明显答案是你所比较的价值不是报价而不是单个字符。这显示了创建MCVE的重要性,而不是在SO上获得更好的答案,但是因为您可以将问题缩小到脚本中的其他内容。