在一行Bash脚本中设置变量

7

寻找一种在bash单行脚本中设置变量的方法,例如:

export class={read -p "What Is Your Profession?" a; case $a in "Theif") echo "Stealth" ; in "Cleric") echo "Heals?" ; "Monk") echo "Focus?" ; *) echo "invalid choice" a; esac}

尽管我尝试了多种方式运行此命令,但没有设置为单行命令时,我遇到了问题,并且没有得到任何结果。上面的内容只是我认为最清晰明了的。我也尝试过VAR= ,
这个案例本身给了我一个...
-jailshell: syntax error near unexpected token `('

每当我使用多个案例运行它时,我知道这可能会变得混乱不堪。

这里有几个问题。首先,在 = 后面你需要一个字符串,花括号不是字符串定界符。试试单引号,例如 var='long complex command'。其次,你永远不应该需要将命令分配给一个变量。为什么要这样做? - n. m.
2个回答

14

当使用case语句时,需要使用两个分号;;来分隔子句,无论是单行还是多行。同时,需要小心处理{ … }因为它用于I/O重定向。此外,在命令的开头,无论是使用{还是},都必须是一个词元。在{后面必须有一个空格(或换行符),在}前必须有一个分号(或“&”符号,或换行符)。即使更改了这些,分配语句也不会执行大括号之间的代码。为此,可以使用命令替换:

export class=$(read -p "What Is Your Profession?" a; case $a in "Theif") echo "Stealth" ;; "Cleric") echo "Heals?" ;; "Monk") echo "Focus?" ;; *) echo "invalid choice $a";; esac)

最后,您没有对“Thief”进行拼写检查。


3

这里有一行代码可以使用:

export class=`{ read -p "What Is Your Profession? " a; case $a in "Theif") echo "Stealth";; "Cleric") echo "Heals?";; "Monk") echo "Focus?";; *) echo "invalid choice" a;; esac; }`

或者更好的方式是将其放入一个函数中:
function readclass() { read -p "What Is Your Profession? " a; case $a in "Theif") echo "Stealth";; "Cleric") echo "Heals?";; "Monk") echo "Focus?";; *) echo "invalid choice" a;; esac; }

然后使用它:
export class=$(readclass)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接