"Предположим, что имя файла задано в качестве аргумента командной строки", что под этим подразумевается?

По какой-то причине '\w\$'не работал у меня, но вместо этого я сделал :export PS1="$(pwd) \$", и это сработало.

-3
03.02.2020, 09:52
1 ответ

Если имя файла указано в качестве аргумента командной строки,это означает, что ваш скрипт вызывается как

./myscript.sh some-file-name

т. е. имя файла задается в качестве аргумента в командной строке.

Как следствие этого, первый элемент списка позиционных параметров скрипта будет автоматически заполнен именем файла. Позиционными параметрами являются значения $1, $2, $3и т.д. (есть $#этих ), и в данном случае только $1будет содержать что-то (заданное имя файла ).

Чтобы использовать данное имя файла в скрипте, используйте "$1". Чтобы получить более читаемый код, назначьте его именованной переменной оболочки:

#!/bin/sh

# Pick out the filename given on the command line.
name=$1

# Verify that the given name is indeed a (regular) file,
# or a symbolic link to a regular file.
if [ ! -f "$name" ]; then
    # It's not, so output error message and exit.
    printf 'The given name "%s" is not a regular file!\n' "$name" >&2
    exit 1
fi

printf 'The given filename is "%s"\n' "$name"

Приведенный выше скрипт дополнительно проверяет, существует ли данное имя файла и является ли он обычным файлом (, а не, например,. каталог )или действительную символическую ссылку на обычный файл.


В качестве примечания. :При написании скрипта, который требует от пользователя одно или несколько имен файлов, создание сценария для получения имени файла (s )из командной строки, как, например, выше, является предпочтительно. Альтернатива, чтение имени файла (с )в интерактивном режиме или из файла, неудобна для пользователя, который затем не может использовать подстановку имени файла оболочки и / или средство завершения табуляции для ввода правильных имен файлов. Также может быть невозможно вводить определенные имена файлов в интерактивном режиме.


Если вам просто нужна функциональность подсчета слов, символов и строк в текстовом файле, то это уже делается утилитой wc:

$ wc.zsh_history
    7824   35317  333801.zsh_history

В приведенном выше примере файл .zsh_historyсодержит 7824 строки, 35317 слов и 333801 символ.

См. man wcв вашей системе.

5
28.04.2021, 23:24

Теги

Похожие вопросы