Będziesz chciał użyć „czytać” Command
while read name
do
echo "$name"
done < names.txt
uwaga, że „$ name” jest cytowany - jeśli nie, zostanie on podzielony za pomocą znaków w $IFS
jako ograniczniki. To prawdopodobnie nie zostanie zauważone, jeśli po prostu echo zmiennej, ale jeśli plik zawiera listę nazw plików, które chcesz skopiować, zostaną one podzielone przez $IFS
, jeśli zmienna jest niecytowana, co nie jest tym, co chcą lub oczekują.
Jeśli chcesz użyć podejście Mike'a Clarka (ładowanie do zmiennej zamiast używać czytać), można to zrobić bez użycia cat
:
NAMES="$(< scripts/names.txt)" #names from names.txt file
for NAME in $NAMES; do
echo "$NAME"
done
Problem z tym jest to, że ładuje całość plik do $NAMES
, po przeczytaniu go z powrotem, można albo uzyskać cały plik (jeśli zacytowano) lub plik z podziałem na $IFS
, jeśli nie jest cytowany. Domyślnie daje to pojedyncze słowa, a nie poszczególne wiersze. Więc jeśli nazwa "Mary Jane" pojawiłaby się na linii, otrzymalibyśmy "Mary" i "Jane" jako dwie oddzielne nazwy. Korzystanie read
będzie obejść ten problem ... chociaż można także zmienić wartość $IFS
Jak o link do oryginalnego Q & A? – bearvarine