我是一个脚本新手,我有这样的问题:
我希望使用fuser命令来检查是否存在具有该名称的文件。我希望保存该命令的输出,并在加载之前使用它重命名文件。
我尝试了以下几点:
#!/bin/bash
file_name='test'
echo 'file_name before: '$file_name
file_name=`fuser FILE_DIR/SD/Test_file_??????????????.dat`
echo 'file_name after: '$file_name'然而,上述代码的结果是:
-bash-3.00$ script.sh
file_name before :test
FILE_DIR/SD/Test_file_20180823120345.dat
file_name after:命令的输出不是存储在变量中,而是显示在屏幕上,我不知道为什么!
我想要做的是将Test_file_20180823120345.dat存储在file_name变量中,然后从其中移除时间戳,并将文件重命名为Test_file_20180823.dat。
然后,在将数据加载到暂存表中之后,再次将文件重命名为我们接收到的旧文件名,然后用其原始名称存档该文件。
发布于 2018-08-24 04:23:53
你的问题是缺少一个结尾单引号:
echo 'file_name before: '$file_name(这也是为什么您必须在最后一行的echo 'file_name after: '$file_name'中不平衡引号才能运行脚本)
相反,只需重复引用echo的整个字符串即可扩展变量file_name,例如。
echo "file_name after: $file_name"此外,避免使用backticks进行命令替换,而使用$(...)表单。
file_name=$(fuser FILE_DIR/SD/Test_file_??????????????.dat)或者重写可能是:
#!/bin/bash
file_name='test'
echo "file_name before: $file_name"
file_name=$(fuser FILE_DIR/SD/Test_file_??????????????.dat)
echo "file_name after: $file_name"(注意:与fuser的匹配将只匹配Test_file_后的14字符和.dat之后的模式-这可能是您想要的,但根据??????????????的可能性,它可能可以用更干净的方式编写)
虽然fuser会提供一个错误,但您也可能希望养成这样的习惯:通过测试在调用fuser之后file_name是否为空,来验证命令替换是否返回了一个变量。
#!/bin/bash
file_name='test'
echo "file_name before: $file_name"
file_name=$(fuser FILE_DIR/SD/Test_file_??????????????.dat)
if [ -z "$file_name" ]; then
echo "error: no file matched pattern" >&2
else
echo "file_name after: $file_name"
fi仔细考虑一下,如果你还有其他问题,请告诉我。
https://stackoverflow.com/questions/51996628
复制相似问题