在bash中定义变量时出错

在bash中定义变量时出错,bash,shell,scripting,Bash,Shell,Scripting,我正在写简单的内务脚本。此脚本包含以下代码行。这是我从实际代码中提取的示例代码,因为它是一个大文件 #!/bin/bash ARCHIVE_PATH=/product/file FunctionA(){ ARCHIVE_USER=user1 # archive storage user name (default) ARCHIVE_GROUP=group1 # archive storage user group (default) functionB

我正在写简单的内务脚本。此脚本包含以下代码行。这是我从实际代码中提取的示例代码,因为它是一个大文件

 #!/bin/bash

 ARCHIVE_PATH=/product/file

 FunctionA(){
    ARCHIVE_USER=user1  # archive storage user name (default)
    ARCHIVE_GROUP=group1    # archive storage user group (default)

    functionB
 }

 functionB() {
    _name_Project="PROJECT1"
    _path_Componet1=/product/company/Componet1/Logs/
    _path_Component2=/product/company/Componet2/Logs/


     ##Component1##
     archive "$(_name_Project)" "$(_path_Componet1)" "filename1" "file.log" 
 }

 archive(){
     _name= $1
     _path=$2
     _filename=$3
     _ignore_filename=$4
     _today=`date + '%Y-%m-%d'`
     _archive=${ARCHIVE_PATH}/${_name}_$(hostname)_$(_today).tar
     if [ -d $_path];then
        echo "it is a directory"
     fi
 }

 FunctionA
当我运行上面的脚本时,我得到以下错误

@localhost.localdomain[] $ sh testScript.sh
testScript.sh: line 69: _name_Component1: command not found
testScript.sh: line 69: _path_Component2: command not found
date: extra operand `%Y-%m-%d'
Try `date --help' for more information.
testScript.sh: line 86: _today: command not found
it is a directory

有人能解释一下我做错了什么吗

变量扩展不正确--您使用的是用于执行子shell替换的
$()
。您需要
${}
,即:

 archive "${_name_Project}" "${_path_Componet1}" "filename1" "file.log" 

至于
日期
错误,在
+

之后没有空格,我看到一行:_today=
日期+%Y-%m-%d'

我发现的一个错误通过删除+和“like so:

_今天=
date+%Y-%m-%d'


我看不出_name_Component1和_name_Component2变量是在哪里声明的,所以我无法帮助:)

一些事情。。。您正在使用$(variable),而它应该是${variable} 在date命令上,确保+和格式之间没有空格
如果您的name=$1,您不希望在那里有空格

应用更改后,它会给我以下错误消息testScript.sh:line 87:[:missing`]@KItis在
]
之前添加空格。它以前工作很可能是因为
$path\
扩展为空。在添加此更改后,它返回以下错误testScript.sh:line 80:PROJECT1:command not found------------------此处第80行为_name=$1。删除_name=$1到_name=$1之间的空格后,此错误也会得到解决。谢谢你的帮助