如何将文件作为参数传递给bash脚本函数?

时间:2019-06-24 17:48:43

标签: bash function file arguments

我试图编写一个脚本来编辑脚本功能内的文件,并使用作为参数传递的文件名将其保存为新文件,以命名新文件。这是我所拥有的一个例子:

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”。我在这里想念什么吗?

2 个答案:

答案 0 :(得分:2)

正如其他人所说,要获取变量的 value ,您需要在变量名前添加一元运算符$。尝试与报价(如果有疑问,请对其报价)保持一致,并在函数内缩进代码(以及ifwhile循环等),所有有经验的程序员都应这样做。

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”