我對在 bash 腳本中使用陣列還很陌生。基本上我創建了一個陣列,例如:
array=( /home/usr/apple/ /home/usr/pineapple/ /home/usr/orange/ )
我想修改這個陣列,使修改后的陣列看起來像:
array=( apple/ pineapple/ orange/ )
我嘗試使用這段代碼:
basepath=/home/usr/
# modify each item in array to remove leading /home/usr
for i in "${array[@]}"
do
array[$i]=${i#$basepath}
done
# print all elements from array
for i in ${array[@]}
do
printf "%s\n" "$i"
done
這給了我一個語法錯誤:運算元預期(錯誤標記是 /home/usr/apple)
預期的結果是它將列印出新的修改陣列,只有 apple/、pineapple/ 和 orange/
感謝您的任何幫助!
uj5u.com熱心網友回復:
您可以在擴展陣列的同時剝離basepath并創建(或更新)一個新陣列:
array=( "${array[@]#"$basepath"}" )
uj5u.com熱心網友回復:
如果要迭代并同時修改陣列的內容,則必須通過其索引來擴展它:
for i in "${!array[@]}"; do
array[i]=${array[i]#$basepath}
done
uj5u.com熱心網友回復:
所有這些都沒有一個 shell 回圈:
#!/usr/bin/env bash
basepath=/home/usr/
array=(/home/usr/apple/ /home/usr/pineapple/ /home/usr/orange/)
# This erases basepath prefix from each entry of array and stores back into array
array=("${array[@]#"$basepath"}")
# Prints all array entries
printf "%s\n" "${array[@]}"
編輯:根據法瓦多納的評論修復
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/418760.html
標籤:
