gpt4 book ai didi

linux - bash 脚本大小写切换

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:33:58 25 4
gpt4 key购买 nike

我正在尝试在 bash 脚本的 case 语句中初始化一个变量,

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
  • 您在 = 符号前后添加了额外的空格。您可能会发现它更容易阅读,但它不是有效的 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 的分配值进行了单引号,并且还转义了反斜杠。这将产生一个包含两个反斜杠的值,我认为这不是您想要的。删除引号或反斜杠之一。

关于linux - bash 脚本大小写切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43319959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com