Как передать содержание файла как несколько аргументов в ударе

Задержка является главным образом проблемой ядра, я сказал бы, что более новые ядра (и таким образом более новые дистрибутивы) дадут лучшие результаты. Дистрибутивы основаны на том же основном программном обеспечении, поэтому что должно иметь значение, вероятно, больше знакомство с ним (необходимо будет усовершенствовать его, и наличие полузабытой системы, вокруг которой управляется незнакомым способом, верный рецепт для разрядной гнили). Проверьте минимальную установку на то, что Вы повседневно используете.

6
08.01.2015, 18:19
3 ответа

«$ (CAT MyData)» оценивает строку, которая содержит содержимое файла MyData минус любые задние новой строки. То, что вы хотите, это список разделяемых пробелов слов в файле. Итак, на этот раз используйте командную замену за пределами двойных кавычек:

myscript.sh $(cat mydata)

для дополнительной устойчивости, отключить глобусинг, так что если столбец в MyData содержит один из символов \ [*? Это не интерпретируется как шаблон имени файла. Вы также захотите установить IFS , чтобы содержать символы разделителя слова, но значение по умолчанию (пробел ASCII) должно быть именно то, что вам нужно.

(set -f; myscript.sh $(cat mydata))

В качестве альтернативы вы можете использовать программу встроенного . Это читает первую строку и игнорирует остальные (которые вы могли бы сделать выше, заменив CAT на голову -N 1 ).

read -r one two three rest <mydata
myscript.sh "$one" "$two" "$three"
6
27.01.2020, 20:22

Это обычно в чем xargs для:

xargs myscript.sh < mydata

xargs , считает, что вход в виде пустых или новых разделяемых слов, в которых единая цитата, двойная цитата или обратная косая черта используется для выхода из сепараторов. XARGS будет запускать команду столько раз, сколько необходимо, чтобы избежать пределе на размер аргументов (и окружающей среды), передаваемой в команду.

5
27.01.2020, 20:22

вместо того, чтобы проходить как несколько аргументов, я просто передаю аргументы в виде одного массива, а затем делать все, что я хочу с аргументами.

#This is the function which takes a variable length array as an input. 
function function_call() 
{
    all_array_values=$1[@]
    a=("${!all_array_values}")
    for i in "${a[@]}" ; do
        echo "$i"
    done
}


#Here I add all the file contents to the variable named input.  
input=$(cat filename)
#In this step I convert the file contents to an array by splitting on space. 
input_to_array=(${input//' '/ })
#I call the function here. 
function_call input_to_array

Тестирование

У меня есть входной файл, как показано ниже.

cat filename
1 2 3 4
5
6
7
8

Как вы можете видеть, я использовал несколько строк, а также на входе для целей тестирования.

Теперь, когда я запускаю вышеуказанный скрипт, я получаю ниже вывод.

1
2
3
4
5
6
7
8

Я меняю входной файл, чтобы иметь меньшее количество аргументов, и когда я бегу с меньшими аргументами, я получаю ниже вывод.

1
2
3
4

Список литературы

https://stackoverflow.com/questions/16461656/bash-how-to-pass-Array-as-an-argument-Ploy-a-function https://stackoverflow.com / a / 5257398/1742825

3
27.01.2020, 20:22

Теги

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