Как объединить арифметику удара с выводом команды?

В академических целях это дало бы входу команды 1k файлы в инкрементах 1 024 байтов путем добавления в тот же файл.

while ((++n<=1024)); do
    printf '\0%.s' {1..1024} >&3
    xxd -g 1 /dev/stdin; echo # sftp command here
done <<<'' 3>/dev/stdin

Но... метод проб и ошибок? Я нашел бы лучший путь.

3
21.08.2013, 21:43
3 ответа

Это - важная причина использовать $( ) вместо ` ` (см. то, Что различие между $ (материал) и 'материалом'?)

При вложении его как это Вам даже не нужно let или переменная:

$ echo $(date +%s) " "  $(( $(date +%s)+100 ))
1377110185   1377110285
5
27.01.2020, 21:09
  • 1
    На самом деле можно измениться $( ) назад к ` ` и это сделает то же самое. То, что Вы на самом деле сделали, измениться let кому: $(( )). –  cjm 21.08.2013, 21:42
  • 2
    @cjm при попытке его обратными галочками Вы будете кричать в конечном счете :) –  Bernhard 21.08.2013, 21:45

Необходимо добавить $ перед круглой скобкой и также экспортировать $future:

$ echo The epoch time is: `date +%s` in 100 seconds the time  will be: \
 `let future=$(date +%s)+100; export future` $future
The epoch time is: 1377110177 in 100 seconds the time will be: 1377110252

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

$ foo=$(echo 12);
$ echo $foo
12
$ foo=(echo 12; foo=0)
$ echo $foo
$ echo $foo
12

Как Вы видите, хотя Вы устанавливаете foo к 0 в $() подоболочка, то значение не экспортируется в родительскую оболочку.

3
27.01.2020, 21:09

Объявите переменные, экспортируйте их и затем используйте их, как Вам нравится:

date=$( date +%s )
future=$(( $date + 100 ))

echo "The epoch time is: $date in 100 seconds time will be: $future"

который дает:

The epoch time is: 1377110185 in 100 seconds time will be: 1377110285

И можно продолжить использовать те значения:

echo "which is the same as $(( $date + 100 ))"  

который дает:

which is the same as 1377110285

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

Или можно оставить переменные всеми вместе:

echo "The epoch time is: $(date +%s) in 100 seconds the time will be: $(( $(date +%s)+100 ))"

Обратите внимание что ''дата + %s\ и $( date +%s ) в значительной степени подобны, но это - другая тема, лучше всего затронутая в этом Ответе

3
27.01.2020, 21:09

Теги

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