我想將多個引數發送到 bash 中的函式。我怎樣才能做到這一點,以便函式正確決議每個引數?
如果可能的話,希望避免使用eval。
這是我嘗試使用的代碼。
#!/bin/bash
arr_files=(
test_file
test_file1
test_file2
)
user=user10
group=user10
cp_chmod_chown(){
# $1 = chmod value
# $2 = chown value
# $3 = array of files
chmod_value=$1
shift
chown_value=$2
shift
arr=("$@")
for i in "${arr[@]}"; do
echo arr value: $i
done
echo chmod_value: $chmod_value
echo chown_value: $chown_value
}
cp_chmod_chown "644" "$user:$group" "${arr_files[@]}"
但是,我無法正確移出前兩個引數,因此引數在陣列中混雜在一起。這是運行上述腳本后的輸出,您可以看到chown_value由于某種原因是陣列中的第一個值:
# ./cp_arra_chmod_chown.sh
arr value: test_file
arr value: test_file1
arr value: test_file2
chmod_value: 644
chown_value: test_file
我嘗試將引數按不同的順序排列,并使用引號而不是引號,我嘗試的任何方法似乎都不起作用。如何將多個引數傳遞給函式?
uj5u.com熱心網友回復:
之后shift,所有值都被轉移。下一個代碼是錯誤的,因為在 first 之后shift,前者$2變為$1:
chmod_value="$1"
shift
chown_value="$2"
shift
你應該改寫:
chmod_value="$1"
shift
chown_value="$1"
shift
或者,如果您愿意:
chmod_value="$1"
chown_value="$2"
shift 2
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/432412.html
上一篇:為什么用os/exec呼叫的這個命令中的'\'無效?
下一篇:將主題標簽寫入檔案
