Попробуйте что-нибудь подобное, хотя я не совсем уверен, что делает ваш скрипт.
if [ -n "$1" -a -n "$2" -a -f "$1" ]; then
dts=($(cat $1 | cut -d: -f$2))
for i in ${!dts[@]}; do
echo "$i) ${dts[$i]} "
done
read -p "Select a user to delete: " OKSELUSRGRP
p=$(echo $OKSELUSRGRP | grep -E ^[0-${#dts[@]}]$)
while [ -z "$p" ]; do
echo "Error, select a correct option"
sleep 1
read -p "Select a user to delete: " OKSELUSRGRP
p=$(echo $OKSELUSRGRP | grep -E ^[0-${#dts[@]}]$)
done
OKSELUSRGRP=${dts[$p]}
else
echo "
Usage: $0 [file] [something else]
$0 can be used to select users or something.
"
fi
Len='echo $str | wc -c'
Это установит переменную Len
в строку echo $ str | wc -c
(ничего не выводит).
Оболочка не будет выполнять ни одну из команд в строке, поскольку это не подстановка команд.
Чтобы получить вывод команды, используйте подстановку команды, $ (...)
:
Len=$( echo "$str" | wc -c )
В этом случае также можно использовать
Len="${#str}"
, что намного быстрее.
Расширение параметра $ {# parameter}
будет расширено до длины значения параметра
.
Вам необходимо назначить переменной Len вывод вашей команды:
Len=$(echo "$str" | wc -c)
Если вы предпочитаете использовать кавычки для подстановки команд, тогда вы должны использовать обратные кавычки: `, а не одинарную кавычку: ', например. :
Len=`echo $str | wc -c`
Как уже упоминалось, вы также можете использовать синтаксис len = $ (...)
.