在bash中[@]是什么意思?

在bash中[@]是什么意思?,bash,directory,Bash,Directory,我有下面的遗留脚本,它将整个文件移动到构建目录中。它正在移动所有.js文件,但不移动任何.py结束文件。如果目录包含一个.js结束文件,它将只移动该文件,如果目录不包含任何.js文件,它将不移动任何内容。我想我需要修改${files[@]}部分以包含.py文件。谁能告诉我“${files[@]}”是什么意思?或者更好地包括移动.py结束文件 #!/bin/bash -e dirs=("app") files=("server.js") function

我有下面的遗留脚本,它将整个文件移动到构建目录中。它正在移动所有
.js
文件,但不移动任何
.py
结束文件。如果目录包含一个
.js
结束文件,它将只移动该文件,如果目录不包含任何
.js
文件,它将不移动任何内容。我想我需要修改
${files[@]}
部分以包含
.py
文件。谁能告诉我“${files[@]}”是什么意思?或者更好地包括移动
.py
结束文件

#!/bin/bash -e
dirs=("app")
files=("server.js")

function compile-dir {
    babel $1 --out-dir "./build/$1"
}

function compile-file {
    babel $1 --out-dir "./build"
}

rm -rf ./build

for dir in "${dirs[@]}"
do
    compile-dir "$dir"
done

for file in "${files[@]}"
do
    compile-file $file
done

mkdir "./build/resources"
cp -R "./resources/" "./build/"
cp -R "./config" "./build/"

要直接回答您的问题:
“bash中[@]是什么意思?”
[@]
与数组变量结合使用,以展开该数组中的所有元素。下面是一些bash/python等价物

猛击
#声明数组
数组=(“e1”“e2”“e3”)
#一行打印数组
echo${array[@]}
#迭代数组元素
对于“${array[@]}”中的元素
做
echo$元素
完成
python
#声明数组
数组=[“e1”、“e2”、“e3”]
#一行打印数组
打印(数组)
#迭代数组元素
对于数组中的元素:
打印(元素)
但更一般地说,您似乎在理解继承的这个遗留bash脚本时遇到了困难。这里有一些评论

#/bin/bash-e
#此脚本使用babel编译器编译目录列表
#和文件。要正确使用此脚本,请确保填充
#运行之前,请先查看下面的“dirs”和“files”数组
#在两个阵列中管理目录/文件
目录=(“应用程序”)
文件=(“server.js”)
#编译目录
#使用babel编译目录并将其输出到build dir中
#@param
函数编译目录{
babel$1--输出目录“/build/$1”
}
#编译文件
#使用babel编译文件并将其输出到build dir中
#@param
函数编译文件{
babel$1--输出目录“/build”
}
#################################
#--主--#
#################################
#首先删除现有的构建目录
rm-rf/构建
#编译dirs数组中的所有dir
对于“${dirs[@]}”中的dir
做
编译目录“$dir”
完成
#编译文件数组中的所有文件
对于“${files[@]}”中的文件
做
编译文件$file
完成
#将'resources'和'config'目录移动到'./build'的'resources'子目录中
mkdir.“/build/resources”
cp-R.“/resources/”./build/”
cp-R“/config”。/build/”

直接回答您的问题:
“bash中[@]是什么意思?”
[@]
与数组变量结合使用,以扩展该数组中的所有元素。下面是一些bash/python等价物

猛击
#声明数组
数组=(“e1”“e2”“e3”)
#一行打印数组
echo${array[@]}
#迭代数组元素
对于“${array[@]}”中的元素
做
echo$元素
完成
python
#声明数组
数组=[“e1”、“e2”、“e3”]
#一行打印数组
打印(数组)
#迭代数组元素
对于数组中的元素:
打印(元素)
但更一般地说,您似乎在理解继承的这个遗留bash脚本时遇到了困难。这里有一些评论

#/bin/bash-e
#此脚本使用babel编译器编译目录列表
#和文件。要正确使用此脚本,请确保填充
#运行之前,请先查看下面的“dirs”和“files”数组
#在两个阵列中管理目录/文件
目录=(“应用程序”)
文件=(“server.js”)
#编译目录
#使用babel编译目录并将其输出到build dir中
#@param
函数编译目录{
babel$1--输出目录“/build/$1”
}
#编译文件
#使用babel编译文件并将其输出到build dir中
#@param
函数编译文件{
babel$1--输出目录“/build”
}
#################################
#--主--#
#################################
#首先删除现有的构建目录
rm-rf/构建
#编译dirs数组中的所有dir
对于“${dirs[@]}”中的dir
做
编译目录“$dir”
完成
#编译文件数组中的所有文件
对于“${files[@]}”中的文件
做
编译文件$file
完成
#将'resources'和'config'目录移动到'./build'的'resources'子目录中
mkdir.“/build/resources”
cp-R.“/resources/”./build/”
cp-R“/config”。/build/”

找到此类问题答案的一种方法是搜索。在本例中,
files
是一个数组,而
foo“${files[@]}”
只是扩展到
foo“file1”“file2”“file3”…
。请参见@Shawn我现在看到了,但仍然不了解它如何包含所有文件,但不包括任何
.py
文件。和
files=(“server.js”)
你应该研究一下
babel
程序是什么。@Shawn得到了它,谢谢。找到类似问题的答案的一种方法是搜索。在本例中,
files
是一个数组,而
foo“${files[@]}”
只是扩展到
foo“file1”“file2”“file3”…
。请参见@Shawn我现在看到了,但仍然不了解它如何包含所有文件,但不包括任何
.py
文件。和
files=(“server.js”)
你应该看看
babel
程序是什么。@Shawn收到了,谢谢