我试图编写一个脚本来编辑脚本功能内的文件,并使用作为参数传递的文件名将其保存为新文件,以命名新文件。这是我所拥有的一个例子:
renamer () {
temp="$1"
echo a test >> temp
cat $temp > new.$1
}
echo this is > b
renamer b
我想要一个名为new.b的文件,其中包含“ this is a test”,但是我的文件中仅包含“ this is”。我在这里想念什么吗?
答案 0 :(得分:2)
正如其他人所说,要获取变量的 value ,您需要在变量名前添加一元运算符$
。尝试与报价(如果有疑问,请对其报价)保持一致,并在函数内缩进代码(以及if
,while
循环等),所有有经验的程序员都应这样做。
renamer () {
# Indenting makes the code easier to read
# copying positional parameters to a named parameter (variable)
# is a good thing, but be consistent
temp="$1"
# Adding quotes preserves additional whitespace in the text
# and preserves whitespace in the filename
echo "a test" >> "$temp"
# Probably better to use cp(1)
# You used $temp before, so why not here too?
# Should this copy be done first? See the comment by @tripleee
cp "$temp" "new.$temp"
}
# Preserve additional whitespace in the text by quoting
echo "this is" > b
renamer b
您可能会合理地说我的建议是更多的工作,但是当您处理更大,更复杂的脚本时,编码学科将在以后有所作为。
答案 1 :(得分:1)
您在temp前面缺少一个美元符号
echo a test >> $temp
在没有美元符号的情况下,bash会按字面意义而不是变量来解释字符串“ temp”