Проблема с отображением содержимого файла с использованием цикла while

#bash

#bash

Вопрос:

 #!/bin/bash
{ cat sample.txt; echo; } | while read -r -a A_Name; do
if [ ! -z "${A_Name[0]}" ]; then
echo " ${A_Name[0]%.isx} "
fi
done
  

Я пытаюсь отобразить содержимое текстового файла (который включает файлы .isx) с помощью цикла while, но когда я пытаюсь исключить расширение с помощью %, это не работает.

Вывод

.isx отображается для первых двух значений:

 ./test.sh
 abc.isx
 def.isx
 ghi
  

Входные данные

sample.txt файл:

 abc.isx
def.isx
ghi.isx
  

Пожалуйста, помогите. Спасибо.

Комментарии:

1. Пожалуйста, добавьте более подробную информацию о вашей проблеме, чтобы мы могли ответить на ваш вопрос

2. Имеет ли файл окончания строк в стиле DOS / Windows?

3. Нет, этого нет. фактически это пустой файл. просто отображение выходных данных без .isx. он отлично работал с циклом for, но не с циклом while .. спасибо

Ответ №1:

почему так сложно?

 #!/bin/bash
cat sample.txt | while read line; do
    echo "${line%.isx}"
done
  

или с помощью sed

 sed "s/.isx//" sample.txt >output.txt
  

или с заменой sed и inplace

 sed -i "s/.isx//" sample.txt