在单行Bash脚本中设置变量

时间:2014-02-25 03:11:42

标签: bash case

寻找一种在bash one-liner中设置变量的方法,即脚本,例如:

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 `('

每当我使用多个案例运行它时。我知道这可能都是乱七八糟的。

2 个答案:

答案 0 :(得分:6)

您需要使用双分号;;来分隔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)

最后,你没有对'小偷'进行拼写检查。

答案 1 :(得分:2)

以下是您可以使用的单行程序:

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)