Unix ksh цикл и поместите результат в переменную - PullRequest
0 голосов
/ 23 февраля 2010

У меня есть простая вещь, но я новичок в UNIX. Итак, у меня есть файл, и в каждой строке у меня есть идентификатор. Мне нужно просмотреть файл и поместить все идентификаторы в одну переменную.

Я пробовал что-то похожее на Java, но не работает.

for variable in `cat myFile.txt`
do
    param=`echo "${param} ${variable}"`
done 

Похоже, не все значения добавляются в параметр.

Спасибо.

Ответы [ 4 ]

2 голосов
/ 23 февраля 2010

Я бы использовал:

param=$(<myFile.txt)

Параметр имеет пробел (фактически новые строки) между именами. Когда используется без кавычек, оболочка расширит их до пробелов, как в:

cat $param

При использовании с кавычками имена файлов останутся в отдельных строках, например:

echo "$param"

Обратите внимание, что в особых случаях оболочки Korn используется нотация '$(<file)', и она не разветвляется и не выполняет никаких команд.

Также обратите внимание, что вашу оригинальную идею можно заставить работать проще:

param=
for variable in `cat myFile.txt`
do
    param="${param} ${variable}"
done

Это вводит пробел в начале параметра; это редко имеет значение. Интересно, что вы можете избежать пробела в передней части, имея один в конце, используя param="${param}${variable} ". Это также работает, не портя вещи, хотя это выглядит, как будто это смешивает вещи. Кроме того, запись '${var}' не является обязательной, хотя она также не наносит вреда.

И, наконец, пока лучше заменить команду back-tick на $(cat myFile.txt). Разница становится решающей, когда вам нужно вложить команды:

perllib=$(dirname $(dirname $(which perl)))/lib

против

perllib=`dirname \`dirname \\\`which perl\\\`\``/lib

Я знаю, что предпочитаю набирать (и читать)!

0 голосов
/ 23 февраля 2010
param="$(< myFile.txt)"

или

while read line
do
    param="$param$line"$'\n'
done < myFile.txt
0 голосов
/ 23 февраля 2010

AWK

var=$(awk '1' ORS=" " file)

КШ

 while read -r line
 do
   t="$t $line"
 done < file
 echo $t
0 голосов
/ 23 февраля 2010

Попробуйте это:

param=`cat myFile.txt | tr '\n' ' '`

Команда tr tr аннулирует все вхождения \n (новая строка) в пробелы. Затем мы присваиваем результат переменной param.

прекрасный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...