Использовать файл в каталоге как аргумент, но без расширения

У меня есть файл с именем «data1.dat», я хочу иметь возможность использовать этот файл в качестве аргумента в моем скрипте без расширения .dat:

./myscript.sh data1 

вместо

  • Fedora 20: пользователи не могут войти в свой домашний каталог
  • для цикла с многострочными данными
  • Удаление данных из буфера потока STDIN другого сеанса TTY
  • В Bash, когда к псевдониму, когда скрипту, а когда писать функцию?
  • Использование переменных для хранения цветовых кодов терминала для PS1?
  • Автозаполнение имен хостов при использовании SSH в файле истории
  •  ./myscript.sh data1.dat 

    возможно ли это, если да, как бы вы это сделали?

  • Как удалить одну строку из истории?
  • bash regex extract key = значение
  • Попросите Bash-скрипт дождаться сообщения о статусе, прежде чем продолжить
  • Как начать работу с bash?
  • Как проверить переменную (модифицируемую) строку в Unix?
  • Почему «sudo su» в сценарии оболочки не запускает остальную часть скрипта как root?
  • 2 Solutions collect form web for “Использовать файл в каталоге как аргумент, но без расширения”

    Абсолютно. Вам просто нужно сделать некоторую текстовую обработку введенного ввода – если он еще не заканчивается на .dat , вы просто добавляете .dat .

     #! /bin/bash if [[ $# -lt 1 ]]; then echo "Usage: $0 <datafile name>" >&2 exit 1 fi DATFILE="$1" if [[ "$DATFILE" != *".dat" ]]; then DATFILE="${DATFILE}.dat" fi if [[ ! -r "$DATFILE" ]]; then echo "Error: Data file '${DATFILE}' does not exist." >&2 exit 1 fi echo "Using data file '${DATFILE}'..." 

    Умножающееся расширение всегда .dat

     filedat=$(dirname -- "$1")/$(basename -- "$1" .dat).dat 

    где

    • $1 – аргумент
    • $(dirname -- "$1") выберет имя dir (dirname ../foo/bar/baz.dat ) => ../foo/bar
    • $(basename -- "$1" .dat) отключит дополнительный .dat $(basename foo.dat .dat) => foo , $(basename foo .dat) => foo
    Linux и Unix - лучшая ОС в мире.