Сравнение отрицательных значений в bash с использованием массивов

Команда cp -P не подходит для ваших нужд. Вы используете заглавную букву аргумента -P , которая используется, чтобы никогда не переходить по символическим ссылкам.

Вы хотите использовать строчные буквы для сохранения временных меток: cp -p


Как описано в разделе комментариев вопроса, использование правильных gid и uid решило проблему:

sudo mount -t cifs //mynas/folder /home/mnt/nas/ -o user=username -o gid=1000,uid=1000
3
10.07.2016, 18:50
2 ответа

По прямой:

arr1=(1 -2 3 -2 2 -4)
arr2=(-2 -3 4 5 2 -5)

i=0

while [[ "$i" -lt "${#arr1[@]}" ]]; do
  a=$(( ${arr1[$i]} * ${arr2[$i]} ))
  if [[ "$a" -lt 0 ]]; then
    echo 2
  else
    if [[ "${arr1[$i]}" -gt 0 ]]; then
      echo 1
    else
      echo 0
    fi
  fi
  : "$((i = i + 1))"
done | paste -sd ' ' -
3
27.01.2020, 21:10

Если вы знакомы с C, C++ или Java, то этот вариант bash for-loop тоже покажется вам знакомым. bash выполняет арифметическую оценку с помощью (( ... )), поэтому мы будем использовать его при сравнении значений:

array1=(  1 -2  3 -2  2 -4 )
array2=( -2 -3  4  5  2 -5 )

array3=( )

for (( i=0; i < ${#array1[@]}; ++i )); do
    if (( array1[i] < 0 && array2[i] < 0 )); then
        array3[$i]=0
    elif (( array1[i] > 0 && array2[i] > 0 )); then
        array3[$i]=1
    else
        array3[$i]=2
    fi
done

echo "${array3[@]}"

Это также хорошо работает с оболочкой ksh93, от которой bash получил многие свои возможности.

6
27.01.2020, 21:10

Теги

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