Объекты в списке должны иметь toString
, чтобы они могли напечатать что-то значимое для экрана.
Вот быстрый тест, чтобы увидеть различия:
public class Test {
public class T1 {
public Integer x;
}
public class T2 {
public Integer x;
@Override
public String toString() {
return x.toString();
}
}
public void run() {
T1 t1 = new T1();
t1.x = 5;
System.out.println(t1);
T2 t2 = new T2();
t2.x = 5;
System.out.println(t2);
}
public static void main(String[] args) {
new Test().run();
}
}
И когда это выполняется, результаты, напечатанные на экране, следующие:
t1 = Test$T1@19821f
t2 = 5
Поскольку T1 не переопределяет метод toString, его экземпляр t1 выводится как нечто, что не очень полезно. С другой стороны, T2 переопределяет toString, поэтому мы контролируем, что он печатает, когда он используется в I / O, и мы видим что-то немного лучше на экране.
IFS=,
полезна, только если вы используете read -a
для чтения в массив, или вы передаете одно имя переменной на столбец, который хотите прочитать. Ниже мы делаем первое:
#!/usr/bin/env bash
# ^^^^ -- NOT /bin/sh
row_idx=0
while IFS=, read -ra values; do
for col_idx in "${!values[@]}"; do value=${values[$col_idx]}
if [ "$value" = something ]; then
echo "something found on row $row_idx, column $col_idx"
fi
done
(( ++row_idx ))
done
См. Это работает на https://ideone.com/JN1pK3 , с выводом (после вставки something
во вторую строку input, рядом с концом): something found on row 1, column 4
(учитывая, что строки и столбцы индексируются нулем).