【问题标题】:Bash Automatically replacing [0:100] with 1Bash 自动将 [0:100] 替换为 1
【发布时间】:2015-12-19 09:38:10
【问题描述】:

我正在编写一个使用 gnuplot 的简单图形脚本,并使用辅助函数来构造一个 .gscript 文件。

add_gscript() {
echo "->>"
echo $1
echo $1 >> plot.gscript
cat plot.gscript
}

但是在将以下参数传递给函数后

echo "--"
echo 'set xrange [0:$RANGE]'
echo "--"
add_gscript "set xrange [0:100]"

在 $RANGE 已预先定义的地方,我得到以下输出

--
set xrange [0:$RANGE]
--
->>
set xrange 1
set datafile separator ","
set term qt size 800,640
set size ratio .618
set xrange 1

bash 是否以某种方式将 [0:100] 评估为 1?

【问题讨论】:

  • 总是 double-quote 变量引用使其值被视为 literals;如果不加引号,这些值(在大多数情况下)会受到 shell 扩展的影响,包括分词和路径名扩展。 [0:100] 恰好是匹配当前目录中任何文件的有效通配模式。命名为 0:1
  • so echo "$1"; echo "$1" >> plot.gscript 和任何其他未引用的变量。祝你好运。

标签: bash scripting


【解决方案1】:

在 cmets 中准确描述了该问题的修复:

总是双引号 变量引用将其值视为文字;如果不加引号,这些值(在大多数情况下)会受到 shell 扩展的影响,包括分词和路径名扩展。 [0:100] 恰好是匹配当前目录中任何文件的有效通配符模式。命名为 0:1。 – mklement0

所以echo "$1"; echo "$1" >> plot.gscript 和任何其他未引用的变量。祝你好运。 – shellter

双引号确实解决了我的问题。谢谢!

【讨论】:

    猜你喜欢
    • 2017-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    • 2013-08-31
    • 2020-10-17
    • 1970-01-01
    相关资源
    最近更新 更多