Вы можете сделайте то, о чем вы просите, вот так:
#!/bin/bash
mkdir -p temp
cd temp
cat <<\_script_lines_ > max.sh
#!/bin/bash
if [ "$1" -gt "$2" ] ;
then
printf '%s\n' "$1"
else
printf '%s\n' "$2"
fi
_script_lines_
chmod u+x max.sh ### make the script excutable.
# Use the script:
./max.sh 4 6
./max.sh -2 -5
./max.sh 7 -3
Но функция, уже рекомендованная Wildcard, кажется более разумной для использования.
Вот небольшая модификация того, что вы уже делали:
set -f # to prevent filename expansion
for i in ${!NIC_index[@]}
do
printf "%-20s" ${NIC_details[i]}
printf "\n"
done
Я добавил цикл for
, чтобы просмотреть все индексы массива - это $ {! NIC ...
синтаксис. Поскольку это числовой массив, в качестве альтернативы вы можете перебирать индексы в цикле.
Обратите внимание, что я намеренно оставил $ {NIC_details [i]}
без кавычек , чтобы оболочка разделяла значение на пробелы, которые вы использовали для разделения значений. Таким образом, printf
видит 3 значения и повторяет форматирование% -20s для каждого из них. Затем я добавляю новую строку после каждой сетевой карты, чтобы получилась красивая таблица.
set -f
вверху важен, если мы оставляем переменные без кавычек; в противном случае оболочка вмешается и попытается указать любые символы подстановки, которые она видит в переменных без кавычек.
Пример вывода:
wlp2s0 192.168.1.221 xx:xx:xx:xx:xx:xx
wwan0 none xx:xx:xx:xx:xx:xx
virbr0 192.168.122.1 00:00:00:00:00:00
Да, есть способ, используйте awk
.
Один пример:
echo ${NIC[0]} | awk '{ printf "%-10s %s\n", $1, $2 }'
Другой способ - получить значения в разных переменных, а затем выполнить printf
из bash.
Например:
var1=$(echo ${NIC[0]} | cut -d ' ' -f1)
var2=$(echo ${NIC[0]} | cut -d ' ' -f2)
var3=$(echo ${NIC[0]} | cut -d ' ' -f3)
И используйте printf
с $ var1,2,3.