我可以直接在bash中为数组分配扩充吗?

时间:2016-11-03 07:22:48

标签: bash

我想直接在bash中为数组赋予一个扩充。 请参阅以下内容,

function chmod_func() {
  local file_path="$1"
  local chmod_options=( ${2:='-R 744'} )  # This line has error.
  sudo chmod "${chmod_options[@]}" "${file_path}"
}

chmod_func "test.txt"

错误信息如下,

$2 : cannot assign in this way

如果有人知道解决方案,请告诉我。非常感谢你。

1 个答案:

答案 0 :(得分:3)

请注意@ l'L'l关于chmod的参数顺序的评论。

您可以通过多种方式设置单个元素。首先是您尝试使用的语法:

chmod_options=( [2]='744 -R' ) 
echo ${chmod_options[@]}
echo ${!chmod_options[@]}

给出:

744 -R
2

但你可以简单地说:

chmod_options[2]='744 -R' 

什么是谜题为什么你想要这样做。在您给出的示例中,它似乎没有任何用处。

你在这里做的是使用函数$2的第二个参数,由于某种原因你正在对函数中的值进行硬编码。你不能这样做:

2='744 -R'          # illegal

但是如果你需要一个数组,你可以这样做:

chmod_options[2]="$2"

或者这个:

chmod_options="$2" 

请注意此处使用的 double 引号。

您的示例中并不需要一个数组,这是我的版本只使用参数:

function chmod_func() {
  local file_path="$1"
  shift   # remove the first parameter

  sudo chmod $@ "${file_path}"
}

chmod_func "test.txt" -R 744