这个问题与如何编写正确转义的字符串文字无关。我找不到任何有关如何转义变量以直接在脚本或其他程序中使用的相关问题。
我的目标是使一个脚本能够生成其他脚本。这是因为生成的脚本中的任务将在另一台计算机上运行0到n次,并且生成它们的数据可能会在运行之前(再次)更改,因此直接通过网络进行操作将不行。
给定一个可能包含特殊字符(例如单引号)的已知变量,我需要将其写为完全转义的字符串文字,例如,一个foo
包含的变量bar'baz
应在生成的脚本中显示为:
qux='bar'\''baz'
通过附加"qux=$foo_esc"
到脚本的其他行来编写。我是这样用Perl做到的:
foo_esc="'`perl -pe 's/('\'')/\\1\\\\\\1\\1/g' <<<"$foo"`'"
但这似乎太过分了。
我仅靠bash并没有取得成功。我尝试了这些的许多变体:
foo_esc="'${file//\'/\'\\\'\'}'"
foo_esc="'${file//\'/'\\''}'"
但是要么多余的斜杠出现在输出中(当我这样做时echo "$foo"
),否则它们会导致语法错误(如果从shell进行操作,则需要进一步的输入)。
alias "varname=$varname" varname
或var=value set
alias
和/或set
相当普遍