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

我可以直接在bash中为数组分配扩充吗?,bash,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 错误消

我想直接在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
错误消息如下:

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

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

请注意@l'l'l对
chmod
参数顺序的评论

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

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

744 -R
2
但你可以简单地:

chmod_options[2]='744 -R' 
谜题是你为什么要这么做。在您给出的示例中,它似乎没有任何用处

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

但如果需要阵列,可以执行以下操作:

chmod_options[2]="$2"
或者这个:

chmod_options="$2" 
注意这里使用的双引号

在您的示例中,您实际上不需要数组,下面是我的版本,它只使用参数:

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

  sudo chmod $@ "${file_path}"
}

chmod_func "test.txt" -R 744

注意@l'l'l对
chmod
参数顺序的注释

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

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

744 -R
2
但你可以简单地:

chmod_options[2]='744 -R' 
谜题是你为什么要这么做。在您给出的示例中,它似乎没有任何用处

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

但如果需要阵列,可以执行以下操作:

chmod_options[2]="$2"
或者这个:

chmod_options="$2" 
注意这里使用的双引号

在您的示例中,您实际上不需要数组,下面是我的版本,它只使用参数:

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

  sudo chmod $@ "${file_path}"
}

chmod_func "test.txt" -R 744

您使用的是哪个版本的bash?我能看到的唯一问题是,您正在向后指定选项;应该是
-R 774
,而不是
774-R
。@I'L'I:我很抱歉问了一些正确的问题。它也适用于我的bash。上述代码是有错误的原始代码的一部分。我应该测试提取的代码。我再次感到抱歉。我将在3分钟内删除这个问题。@I'L'I:我改变主意,我不会删除这个问题,而是关闭它,因为下面的cdarke的答案很有用。它给出了解决方案。@I'L'I:我修复了上面的代码以正确地重新生成错误。如果您感兴趣,我会通知您。您使用的是哪个版本的bash?我能看到的唯一问题是,您正在向后指定选项;应该是
-R 774
,而不是
774-R
。@I'L'I:我很抱歉问了一些正确的问题。它也适用于我的bash。上述代码是有错误的原始代码的一部分。我应该测试提取的代码。我再次感到抱歉。我将在3分钟内删除这个问题。@I'L'I:我改变主意,我不会删除这个问题,而是关闭它,因为下面的cdarke的答案很有用。它给出了解决方案。@I'L'I:我修复了上面的代码以正确地重新生成错误。如果你有兴趣,我会通知你的。