我正在尝试将以下字符串写入文件:1;2;3;4
。分号会产生问题。
我已经能够找出以下方法来做到这一点:
variable='1;2;3;4'
echo "${variable//;/\;}" >output.file
但是,如果由于某种原因由 crontab 执行,它不会生成输出文件,只有手动执行时它才有效。
我的代码有什么替代方案吗?
答案1
这里有两个问题。首先,如果你想替换;
为\;
,你需要转义\
。请记住,这\
是一个特殊字符,它用于转义(这大概就是为什么您要在 之前添加它;
)。为了从字面上使用它,在替换中,你也需要转义它:
$ variable='1;2;3;4'
$ echo "${variable//;/\;}" ## fails
1;2;3;4
$ echo "${variable//;/\\;}" ## works
1\;2\;3\;4
下一个问题是,正如 Cuonglm 指出的, cron 运行所有内容/bin/sh
。根据您的系统,可能是在 sh 兼容模式下运行的 bash,或者另一个最小的 shell(dash
在基于 Debian 的系统上),甚至是古老的 bourne shell 本身。因此,该${var//foo/bar}
构造很可能不起作用。例如,在dash
:
$ variable='1;2;3;4'
$ echo "${variable//;/\\;}"
dash: 2: Bad substitution
但是,如果您只想将变量中保存的字符串打印到文件中,那么这应该始终有效:
variable='1;2;3;4'
printf '%s\n' "$variable" > file