Умножить элемент массива bash и установить элемент массива в новое значение

Я нашел интересное обходное решение, которое работает отдельно для каждого устройства, протестировано на Xubuntu 18.10 с USB-устройствами и монтированием EncFS.

Это очень просто, удалите нужный .Trash-$(id -u)каталог(id -uчаще всего 1000 ), и создайте вместо него файл с таким же именем:

rm -rf /path/to/.Trash-1000
touch /path/to/.Trash-1000

Что происходит теперь, когда вы удаляете файл, по крайней мере, с помощью Thunar, так это то, что вместо перемещения файлов в корзину появляется диалоговое окно с предупреждением о том, что файлы будут уничтожены (, что тоже здорово, так как вы не Я не хочу, чтобы они были уничтожены случайно ).

0
10.12.2020, 18:03
2 ответа

Повторить индексы массива, чтобы было проще установить новое значение.

Это использует caseдля ветвления по шаблонам глобусов, и вы можете легко расширить это до MиG

stats_array=( 1 54 54K 99 )
for idx in "${!stats_array[@]}"; do
  value=${stats_array[idx]};
  case $value in
    *K) stats_array[idx]=$(( ${value%K} * 10**3 )) ;;
  esac
done
declare -p stats_array
declare -a stats_array=([0]="1" [1]="54" [2]="54000" [3]="99")

Обратите внимание, что арифметика bash не может обрабатывать числа с плавающей запятой, поэтому вы не можете ожидать, что 53.9Kпревратится в53900

1
18.03.2021, 22:44
$ { IFS=, ; arr=( 1,54,54K,99k ); }

$ printf '%s\n' ${arr[@]}
1    
54    
54K    
99k

## note: enable extended pattern matching for [...] with 'shopt -s extglob'
$ rearr=( "${arr[@]//%[Kk]/000}" )
$ printf '%s\n' ${rearr[@]}
1    
54    
54000    
99000

## or write the changes to same array
$ arr=( "${arr[@]//%[Kk]/000}" )

См. также:Как добавить/удалить элемент в/из массива в bash?

4
18.03.2021, 22:44

Теги

Похожие вопросы