String bash:如何组合字符串:`";文件名=输出“0.csv”`

String bash:如何组合字符串:`";文件名=输出“0.csv”`,string,bash,concatenation,String,Bash,Concatenation,我正在使用bash脚本执行一个程序。程序必须采用以下参数。(该程序是gnuplot。) gnuplot-e“filename='output\u 0.csv''plot.p' 我需要能够组合以下字符串:“filename='output\u 0.csv'” 我的计划是组装字符串string=filename='output\u 0.csv',然后执行以下操作:gnuplot-r“$string”'plot.p'。注意,我没有突出显示stackoverflow语法样式的字符串,以强调我想要生成的字

我正在使用bash脚本执行一个程序。程序必须采用以下参数。(该程序是gnuplot。)

gnuplot-e“filename='output\u 0.csv''plot.p'

我需要能够组合以下字符串:
“filename='output\u 0.csv'”

我的计划是组装字符串string=
filename='output\u 0.csv'
,然后执行以下操作:
gnuplot-r“$string”'plot.p'
。注意,我没有突出显示stackoverflow语法样式的字符串,以强调我想要生成的字符串

我对bash不是特别精通,所以我不知道如何做到这一点

我认为字符串可以通过使用
STRING=“$STRING”东西附加到字符串中来连接?我认为可能需要这样做


作为一个额外的复杂性层,值0实际上是一个整数,每次程序运行时,该值应增加1。(通过for循环完成。)如果我的程序中有
n=1
,我如何用“字符串值”或整数n的文本版本替换字符串中的
0

将某些内容附加到现有字符串中最安全的方法是使用小括号和引号:

STRING="something"
STRING="${STRING}else"
您可以使用以下内容创建命令行的“动态”部分:

somevalue=0
STRING="filename='output_${somevalue}.csv'"
还有其他工具,如
printf
,可以处理更复杂的格式设置

somevalue=1
fmt="filename='output_%s.csv'"

STRING="$(printf "$fmt" "$somevalue")"
关于您的“额外的复杂性层”,我认为这种增量必须以这样一种方式发生:将值存储在程序之外的某个地方,或者您可以使用
for
循环来处理事情。您可以为此使用临时文件:

#!/usr/bin/env bash

# Specify our counter file
counter=/tmp/my_counter

# If it doesn't exist, "prime" it with zero
if [ ! -f "$counter" ]; then
  echo "0" > $counter
fi

# And if it STILL doesn't exist, fail.
if [ ! -f "$counter" ]; then
  echo "ERROR: can't create counter." >&2
fi

# Read the last value...
read value < "$counter"

# and set up our string, per your question.
STRING="$(printf "filename='output_%d.csv'" "${value}")"

# Last, run your command, and if it succeeds, update the stored counter.
gnuplot -e "$STRING" 'plot.p' && echo "$((value + 1))" > $counter
#/usr/bin/env bash
#指定我们的计数器文件
计数器=/tmp/my_计数器
#如果它不存在,“素数”为零
如果[!-f“$计数器”];然后
回显“0”>$计数器
fi
#如果它仍然不存在,就失败。
如果[!-f“$计数器”];然后
echo“错误:无法创建计数器。”>&2
fi
#读取最后一个值。。。
读取值<“$计数器”
#根据你的问题设置我们的字符串。
STRING=“$(printf”filename='output\u%d.csv'”${value}”)
#最后,运行命令,如果成功,则更新存储的计数器。
gnuplot-e“$STRING”'plot.p'和&echo“$(值+1))”>$计数器

和往常一样,解决这个问题的方法不止一种。幸运的是,这将使您在阅读bash手册页和其他StackOverflow问题时领先一步,这将帮助您了解您需要什么

发布了一个答案,我认为我已经接受了,但由于某种原因,它被删除了,可能是因为它没有完全回答问题


我发布了另一个类似的问题,这个问题的答案也帮助我回答了这个问题。您可以在这里找到上述问题和答案:

事实上,我不确定这是否有效!在传递参数
$STRING
时,bash是否正确解释“”字符?gnuplot是否需要参数字符串中的引号(单引号或其他引号)?如果成功了,那么你的计划应该会很好。如果没有,那么您不希望将它们包含在变量值中。看起来您的路径是正确的。还可以阅读引号之间的差异@RTLinuxSW谢谢,这很有用,知道在变量中加引号可能很棘手。有关这些变化的一些示例,请参见。