这非常奇怪:我有一个函数,它接受一个文件路径,读取最后一行并返回值。
现在,我想从另一个脚本调用此函数;所以我只是将路径传递给文件,并在函数中获得$ 1,所以我可以使用它。
但似乎出于某种原因,bash不喜欢我给变量分配$ 1的想法。
printval(){
textfile=$1
result=$(tail -n 1 $textfile)
echo $result
当我调用该函数时:
printval "/User/admin/test.txt"
现在,无论我如何传递文件路径(我可以通过变量或仅作为字符串传递它),无论我在函数中使用$ 1,还是我明确键入文件的路径,结果是我得到一个错误,说'#34;权限被拒绝。
奇怪的是,如果我在函数
中printval(){
result=$(tail -n 1 "/User/admin/test.txt")
echo $result
我没有收到任何错误,并且文件读取正确。
我做错了什么?我只是想将一个文件的路径传递给函数,所以我可以在函数中使用该文件的内容。
答案 0 :(得分:3)
您使用的实际文件是否在其文件名中有空格?也就是说,你实际输入的是这样的东西:
printval "/User/j doe/test.txt"
你应该用防御性引用来编写你的函数:
printval(){
textfile=$1
result=$(tail -n 1 "$textfile")
echo "$result"
}
引用不参数传递。您可以使用textfile
将/User/j doe/test.txt
设置为textfile=$1
,但是当您使用它时,bash会将tail -n 1 $textfile
扩展为tail -n 1 /User/j doe/test.txt
,其中引用了两个可能不在的文件存在。您需要引用$textfile
来避免使用tail -n 1 "$textfile"
)。
答案 1 :(得分:-2)
改为打电话
printval /User/admin/test.txt
否则失败(我不确定它正在寻找的文件是“/User/admin/test.txt”,我想不是,但它失败了)
将其放在.sh文件
上#!/bin/bash
printval(){
textfile=$1
result=$(tail -n 1 "$textfile")
echo $result
}
printval ~/.bashrc
自己尝试一下。如果不使用最后一行,则使用
printval "~/.bashrc"
如你在帖子中所说,它会抱怨。