2012-06-27 2 views
1

У меня есть очень простой скрипт:

#!/bin/bash 
gnuplot << EOF 
set term postscript portrait 
set output 'out.ps' 

plot 'data_file' u 3:($2==0.0 ? $2:1/0) 

EOF 

где data_file выглядит следующим образом:

O4  -1.20  -0.33  -5.20 
O9.5  -1.10  -0.30  -3.60 
    B0  -1.08  -0.30  -3.25 
B0.5  -1.00  -0.28  -2.60 
B1.5  -0.90  -0.25  -2.10 
B2.5  -0.80  -0.22  -1.50 
    B3  -0.69  -0.20  -1.10 
.... 

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

gnuplot> plot 'S-K_data' u 3:(==0.0 ? :1/0) 
         ^
     line 0: invalid expression 

Как вы можете видеть, это не читает $2 характа и я просто не могу понять, почему.

ответ

3

В некотированном здесь документе переменные расширяются. Попробуйте

gnuplot << 'EOF' 

или

gnuplot << \EOF 

Что вы выбираете, зависит от личных предпочтений (вы можете использовать любой механизм квотирования, поэтому EOF"" работы, но два выше являются наиболее распространенными). Когда разделитель heredoc некотируется, оболочка расширяет $2 ко второму параметру, переданному сценарию. (Попробуйте вызвать скрипт с двумя аргументами.) Когда ограничитель heredoc цитируется, такого расширения не происходит.

+0

Это исправлено, спасибо! – Gabriel

+0

Блестящий. Я никогда не знал, что это существовало. (Теперь мне нужно вернуться ко всем моим скриптам, удаляя '\ $ 1' и т. Д.). – mgilson

Смежные вопросы