Bash 如果用户输入中至少有一个引号,则测试将中断
如果用户输入包含一个单引号,如Bash 如果用户输入中至少有一个引号,则测试将中断,bash,shell,if-statement,Bash,Shell,If Statement,如果用户输入包含一个单引号,如 $ echo "Hello my name Foo I'm 18" | ./test.sh 它失败,出现错误语法错误:应为操作数(错误标记为“')) 代码: #/垃圾箱/垃圾箱 读行时 做 str=$line for((i=0;i
$ echo "Hello my name Foo I'm 18" | ./test.sh
它失败,出现错误语法错误:应为操作数(错误标记为“'))
代码:
#/垃圾箱/垃圾箱
读行时
做
str=$line
for((i=0;i<${str};i++)
做
如果[[“${str:$i:1}”-gt 4]您可以使用:
#!/bin/bash
while read -r line; do
str=$line
for ((i = 0; i < ${#str}; i++)); do
ch="${str:$i:1}"
if [[ $ch == [0-9] && $ch -gt 4 ]]; then
echo 'foo'
elif [[ $ch == [0-9] && $ch -lt 4 ]]; then
echo 'bar'
else
echo 'not a number'
fi
done
done
#/bin/bash
而read-r行;做
str=$line
对于((i=0;i<${str};i++);做
ch=“${str:$i:1}”
如果[[$ch==[0-9]&&$ch-gt 4];然后
回声“foo”
elif[[$ch==[0-9]&&&ch4];然后
回音“条”
其他的
回音“不是数字”
fi
完成
完成
- 使用
/bin/bash
代替/bin/sh
- 在使用
-gt
或-lt
运算符之前,请使用$ch==[0-9]
检查字符是否为数字,以避免预期的操作数错误
您的意思是“恰好一个单引号”还是“至少一个单引号”?Jubobs已更正,感谢问题是-gt
和-lt
需要整数参数,如果参数是有效标识符(如H
,e
等),则将其扩展为参数。在大多数情况下,这些参数不存在,计算结果为0(因此,大量的条形图
输出。'
不是有效的参数名称,因此您会遇到一个错误。但是,为什么您要首先尝试将字符串与整数进行比较?我认为您需要解释您正试图完成的操作,以便正确修复它。在我看来,这可能会提供错误的结果例如,如果输入为18
(您也可以使用简单模式检查$i
是否为数字:$i!=*[!0-9]*
)
#!/bin/bash
while read -r line; do
str=$line
for ((i = 0; i < ${#str}; i++)); do
ch="${str:$i:1}"
if [[ $ch == [0-9] && $ch -gt 4 ]]; then
echo 'foo'
elif [[ $ch == [0-9] && $ch -lt 4 ]]; then
echo 'bar'
else
echo 'not a number'
fi
done
done