我可以直接在bash中为数组分配扩充吗?
我想直接在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 错误消
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:我修复了上面的代码以正确地重新生成错误。如果你有兴趣,我会通知你的。