В любой оболочке POSIX:
var=123.444.888.235
new_var="${var%.*}.0"
$ {var% pattern}
- это оператор, представленный ksh
в 80-х годах, стандартизированный POSIX для стандартного языка sh
и теперь реализованный всеми оболочками, которые интерпретируют этот язык, включая bash
.
$ {var% pattern}
расширяется до содержимого $ var
без самой короткой строки, которая соответствует шаблону в конце (или к тому же самому, что и $ var
, если этот шаблон не соответствует). Итак, $ {var%. *}
(где . *
- шаблон , который означает точку, за которой следует любое количество символов) заменяется на $ var
без крайнего правого .
и что за ним следует. Напротив, $ {var %%. *}
, где удаляется самая длинная строка , соответствующая шаблону, будет расширяться до $ var
без крайнего левого .
и что за ним следует.
Это одно из решений :избавиться от аргументов и выполнить замену вручную.
#!/bin/bash
#set up code in here...
gnuplot <<- EOF
do for [j=0:${first}] {
do for [i=4:${second}] {
plot '${data}' index j using 2:i with lp
}
}
EOF
Вы можете попробовать что-то вроде:
gnuplot -c /dev/stdin "$first" "$second" <<-EOF
do for [j=0:ARG1] {
do for [i=4:ARG2] {
plot '${data}' index j using 2:i with lp
}
}
EOF
Gnuplot жалуется
line 4: No previous filename
но затем я получаю ту же ошибку при использовании файла сценария, так что, вероятно, это как-то связано с неполным кодом.