传递 $1 时无法打开文件,但传递文件名时可以打开文件
Cannot open file when pass $1, but can open file when pass the file name
这可能是一个幼稚的问题,但我是 bash 脚本编写的新手。我试图打开一个文件并计算该文件中的行数,如果它大于 4,则输出一些内容。我已经想出如何将行数传递并保存到变量,但是当我没有传递确切的名称时,我无法访问 bash 中的文件。因此,我将这个名为 new_test 的程序写成这样:
test_function()
{
file_name='test_text.txt'
n=$(wc -l < $file_name)
if [ 'n > 2' ]
then
echo "Too many lines"
fi
}
test_function
这个程序可以工作,但是当我尝试通过将第 3 行从以下位置更改为更通用以接受任何文件时:
file_name='test_text.txt'
到
file_name=
然后调用
./new_test test_text.txt
它输出:
./test_file[4]: : cannot open
根据我的理解,$1 是传递的第二个参数,在 ./new_test test_text.txt 的情况下,这将是 test_text.txt 文件。我是否需要获取第二个参数的地址或者符号是否不同才能执行此操作?提前谢谢你。
函数内部的</code>是函数参数,不是脚本参数。您需要获取该顶级参数并将其传回函数本身。</p>
<pre><code>test_function()
{
file_name=""
n=$(wc -l < $file_name)
if [ 'n > 2' ]
then
echo "Too many lines"
fi
}
test_function ""
确保您也不要忘记引号,否则您将 运行 遇到路径中包含空格的文件的问题。
这可能是一个幼稚的问题,但我是 bash 脚本编写的新手。我试图打开一个文件并计算该文件中的行数,如果它大于 4,则输出一些内容。我已经想出如何将行数传递并保存到变量,但是当我没有传递确切的名称时,我无法访问 bash 中的文件。因此,我将这个名为 new_test 的程序写成这样:
test_function()
{
file_name='test_text.txt'
n=$(wc -l < $file_name)
if [ 'n > 2' ]
then
echo "Too many lines"
fi
}
test_function
这个程序可以工作,但是当我尝试通过将第 3 行从以下位置更改为更通用以接受任何文件时:
file_name='test_text.txt'
到
file_name=
然后调用
./new_test test_text.txt
它输出:
./test_file[4]: : cannot open
根据我的理解,$1 是传递的第二个参数,在 ./new_test test_text.txt 的情况下,这将是 test_text.txt 文件。我是否需要获取第二个参数的地址或者符号是否不同才能执行此操作?提前谢谢你。
函数内部的</code>是函数参数,不是脚本参数。您需要获取该顶级参数并将其传回函数本身。</p>
<pre><code>test_function()
{
file_name=""
n=$(wc -l < $file_name)
if [ 'n > 2' ]
then
echo "Too many lines"
fi
}
test_function ""
确保您也不要忘记引号,否则您将 运行 遇到路径中包含空格的文件的问题。