的bash脚本的情况下开关
我想在bash脚本一个case
语句来初始化变量,的bash脚本的情况下开关
function cpfiles(){
case $1 in
a) echo "a" ; source = ${HOME}/dev/a.zip ; dest = 'PROGRA~2\\a.zip';;
b) echo "b" ; source = ${HOME}/dev/b.zip ; dest = PROGRA~2\\b.zip;;
*) echo "INVALID MODULE !" ;;
esac
echo ${source} ${dest}
}
,但我收到此错误:
[#] cpfiles a
a
bash: =: No such file or directory
bash: dest: command not found...
我缺少什么?
你的脚本包含以下:
a) echo "a" ; source = ${HOME}/dev/a.zip ; dest = 'PROGRA~2\\a.zip';;
b) echo "b" ; source = ${HOME}/dev/b.zip ; dest = PROGRA~2\\b.zip;;
问题:
-
source
是内置 - 壳你之前和
=
符号后添加多余的空格。您可能会发现更容易阅读,但它不是有效的shell语法。
因此,而不是将值分配给一个名为source
变量时,实际上是调用source
内建命令,传递=
作为参数。
试试这个:
a) echo "a" ; source=$HOME/dev/a.zip ; dest='PROGRA~2\a.zip';;
b) echo "b" ; source=$HOME/dev/b.zip ; dest='PROGRA~2\b.zip';;
请注意,周围HOME
括号,而完全有效的,没有必要的,因为没有歧义其中变量名结束(/
不是一个变量名有效,所以shell在解析时停在那里)。双引号将被大多数人在分配上使用,但是当分配的字符串不包含空格时(即使其扩展值确实存在),它也不是必需的。
最后一个问题......在其中一种情况下,您将单引号分配的值为dest
,并且还要转义反斜杠。这将产生一个包含两个反斜杠的值,我认为这不是你想要的。删除引号或其中一个反斜杠。
谢谢, 当我删除所有工作的空间,非常有帮助 – Breakidi
在shell中的赋值不需要围绕=
留空白。 某些命令期望单个=
作为参数是完全有效的。
你得到=: No such file or directory
因为source
是,试图打开该文件名为shell命令:
source: source filename [arguments]
Execute commands from a file in the current shell.
和dest: command not found
因为后者的一部分被作为运行命令dest
。
空格在bash中很重要,用于分隔参数;设置一个变量
source=${HOME}/dev/a.zip
为source
是一个命令下面的命令试图打开该文件=
不存在
source = ...
两件事情在你的脚本重要的这是造成错误:
1.来源:它是一个shell变量,可用于将任何函数文件加载到当前shell脚本或命令提示符中。 它从给定的FILENAME读取和执行命令并返回。
2.“=”在Unix中a = b没有空格被视为赋值运算符,a = b用于比较两个字符串或者您可以像[[$ str1 == $ str2]一样检查条件语句。这是字符串相等性检查的另一种方法。
此外,$ HOME将足以获取变量的值而不是$ {HOME},但如果使用它,则不会发生任何错误。请参阅下面的上下文。
* $回声$ {SHELL}
/斌/庆典
$回声$ SHELL
/斌/庆典*
除的答案,我会检查在B报价)dest后= – Michal