我有一个shell脚本,我正在尝试使用多个变量写入文件,但其中一个被忽略。
#!/bin/bash
dir=/folder
name=bob
date=`date +%Y`
command > $dir/$name_$date.ext
$name
被忽略了。我该如何解决这个问题?
答案 0 :(得分:4)
您是否注意到_
被“忽略”了?这是一个很大的提示
如果您使用set -u
,则会看到以下内容:
-bash: name_: unbound variable
bash解析它的方式,下划线是变量名的一部分。
有几种方法可以解决这个问题
最干净的是${var}
构造,它将变量名称与其周围环境分开
您还可以通过各种方式使用引号来强制进行正确的解析,例如:"$dir/$name""_$date.ext"
如果您的变量可能包含空格(现在或将来),请使用单词的引用。
command >"$dir/${name}_$date.ext"
command >"${dir}/${name}_${date}.ext"
这两个都很好,只需选择一种风格并坚持下去。