在终端输入:
cd Desktop
chmod 777 isPalindromeFun.sh
./isPalindromeFun.sh
isPalindrome madam
发出错误:str=madam not found
#!/bin/bash
function isPalindrome () {
if [ "$#" -ne 0 ];
then
inc=$1; # if it has arguments set the increment with the first argument
fi
[ $# -eq 0 ] && { read str ;} || \ str=$*
String="$(echo $str | sed 's/[^[:alnum:]]//g' | \
tr '[:upper:]' '[:lower:]')"
if [ "$(echo $String | rev)" = "$String" ]
then
echo "\"$str\" is a palindrome"
else
echo "\"$str\" is not a palindrome"
fi
}
答案 0 :(得分:2)
将此作为单行写入时需要删除反斜杠:
[ "$#" -eq 0 ] && { read str ;} || \ str=$*
将代码写成两行更有意义:
[ "$#" -eq 0 ] && { read str ;} || \
str=$*
然而,只有一行,反斜杠只有转义跟随它的字符的效果 - 使下一个字符,一个空格,是数据而不是语法 - 从而使你的命令
str=$*
取而代之的是
" str="$*
意味着空间是命令的一部分。这不是一个有效的任务,当然在您的系统上没有名为" str=madam"
的命令(以空格开头!)。
除此之外:$#
并非严格需要引用 - 除非您IFS
设置为包含数字的值,否则展开$#
的结果将保证扩展到一个单词 - 但我这样做是为了解决StackOverflow的语法高亮问题。