Из скрипта bash, как мне создать новое имя файла, поместить в него переменную $? - PullRequest
1 голос
/ 18 сентября 2010

Внутри цикла в моем скрипте bash я «делаю работу», затем записываю результат каждой итерации в свой собственный файл. Я хотел бы назвать эти файлы

# User-defined Function (UDF)
processLine(){

line="$@" # get all args 
index=$(echo $line | gawk -F::: '{ print $1 }')
content=$(echo $line | gawk -F::: '{ print $2 }')

# Let's tr it to remove double-quotes(42) and lfs(12)!
content=$(echo $content | tr -d \012)
content=$(echo $content | tr -d \042)
content=$(echo $content | tr -d \054)

# - THEN APPEND THE LINE to OUTPUT FILE
echo $index','$content>>OUTPUT

# - ALSO, save 'raw' individual student data as a backup
echo $content>STUDENTS/STUDENT.$index
}

Да, я знаю, что это плохо написано! Эй, это почти мой первый сценарий!

Я хотел бы написать имена файлов, такие как STUDENT.7534, а не STUDENT. "7534" - которые даже нельзя открыть.

Хммм ... Что делать?

1 Ответ

3 голосов
/ 18 сентября 2010

Критика:

# User-defined Function (UDF)
processLine(){

    index=$1  # First argument is the index
    shift     # Remove the index
    # Grab the content - "$*" is fine here,
    # and $* or $@ without quotes would probably work
    # And do the editing in a single tr operation
    # And document what we're doing completely
    # Let's tr it to remove double-quotes (42) and lfs (12) and comma (54)!
    content=$(echo "$*" | tr -d \012\042\054)

    # - THEN APPEND THE LINE to OUTPUT FILE
    # Single quotes around the comma are unnecessary
    echo $index,$content >>OUTPUT

    # - ALSO, save 'raw' individual student data as a backup
    echo $content >STUDENTS/STUDENT.$index
}

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

Вы говорите, что имя выходного файла:

СТУДЕНТ. "7534" - который даже нельзя открыть.

Его можно открыть, если вы помните, что оболочка удаляет двойные кавычки, поэтому вы должны остановить это, выполнив это:

cat 'STUDENT."7534"'

Все, что вам нужно сделать, это убедить ваших инструкторов, что это мера предосторожности, чтобы они знали достаточно оболочки, чтобы иметь доступ к вашим защищенным файлам.

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