Как передать файл в качестве аргумента функции скрипта bash? - PullRequest
0 голосов
/ 24 июня 2019

Я пытаюсь написать скрипт для редактирования файлов в функции скрипта и сохранить их как новые файлы, используя имя файла, переданное в качестве аргумента для имени нового файла. Это пример того, что у меня есть:

renamer () {

temp="$1"
echo a test >> temp
cat $temp > new.$1

 }

echo this is > b

renamer b

Мне нужен файл с именем new.b, в котором содержится «это тест», но в моем файле просто есть «это». Я что-то здесь упускаю?

Ответы [ 2 ]

2 голосов
/ 24 июня 2019

Как уже говорили другие, чтобы получить значение переменной, вам нужно поставить префикс имени переменной с унарным оператором $. Постарайтесь соответствовать вашей цитате (если сомневаетесь, заключите ее в кавычки) и вставьте код в функции (и циклы if, while и т. Д.), Что делают все опытные программисты.

renamer () {

    # Indenting makes the code easier to read
    # copying positional parameters to a named parameter (variable)
    # is a good thing, but be consistent 

    temp="$1"

    # Adding quotes preserves additional whitespace in the text
    # and preserves whitespace in the filename
    echo "a test" >> "$temp"

    # Probably better to use cp(1)
    # You used $temp before, so why not here too?
    # Should this copy be done first?  See the comment by @tripleee
    cp "$temp" "new.$temp"

 }

# Preserve additional whitespace in the text by quoting
echo "this is" > b

renamer b

Вы могли бы разумно сказать, что то, что я предлагаю, - это больше работы, но дисциплина кодирования принесет дивиденды позже, когда вы будете иметь дело с большими и более сложными сценариями.

1 голос
/ 24 июня 2019

Вы пропускаете знак доллара перед темпом

echo a test >> $temp

Без знака доллара bash интерпретирует строку «temp» буквально, а не как переменную

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