我想直接在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
如果有人知道解决方案,请告诉我。非常感谢你。
答案 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