在一行Bash脚本中设置变量
正在寻找一种在bash one liner中设置变量的方法,即脚本,例如:在一行Bash脚本中设置变量,bash,case,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} 尽管我在运行这个命令时没有将其设置为一行时遇到问题,但我已经尝试了很多
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 `('
每当我用一个以上的案例运行它时。我知道这可能是一堆乱七八糟的东西。这里有一行你可以用:
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)
您需要双分号
分隔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)
最后,您还没有对“小偷”进行拼写检查。这里有几个问题。首先,在
=
后面需要一个字符串,大括号不是字符串分隔符。尝试使用单引号,如var='long complex命令'
。接下来,您不需要将命令分配给变量。你为什么这么做?啊+如果,则为1<代码>;)代码>