Это делает не то, что вы думаете. $1
является первым параметром, который вы передаете скрипту, но на самом деле вы не передаете никакого параметра. Это означает, что cat $file
на самом деле становится cat
. Если не передавать никаких аргументов, cat
просто выведет свой вход:
$ echo "foo" | cat
foo
Итак, первый cat
выводит входные данные, содержимое файла. У второго нет входных данных, поскольку все они были получены первым, поэтому он ничего не делает. Вы хотите сделать что-то вроде:
myscript.sh file
Это распечатает содержимое файла дважды, а также сохранит вывод cat $file |wc
в переменной n
.
Если вы хотите сохранить содержимое файла в $file
, попробуйте:
file="$(cat < "$1")"
И запустите скрипт с именем файла в качестве аргумента:
script.sh file