分配(str = $ *)试图在bash中作为命令运行

时间:2014-10-31 19:54:27

标签: shell palindrome

在终端输入:

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
}

1 个答案:

答案 0 :(得分:2)

将此作为单行写入时需要删除反斜杠:

[ "$#" -eq 0 ] && { read str ;} || \ str=$*

将代码写成两行更有意义:

[ "$#" -eq 0 ] && { read str ;} || \
  str=$*

然而,只有一行,反斜杠只有转义跟随它的字符的效果 - 使下一个字符,一个空格,是数据而不是语法 - 从而使你的命令

str=$*

取而代之的是

" str="$*

意味着空间是命令的一部分。这不是一个有效的任务,当然在您的系统上没有名为" str=madam"的命令(以空格开头!)。


除此之外:$#并非严格需要引用 - 除非您IFS设置为包含数字的值,否则展开$#的结果将保证扩展到一个单词 - 但我这样做是为了解决StackOverflow的语法高亮问题。