我是脚本编写的新手,并且遇到了这个问题:
我想使用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
。
然后,将数据加载到暂存表中后,再次将文件重命名为我们收到的旧文件名,然后使用其原始名称存档文件。
答案 0 :(得分:1)
您的问题是:
echo 'file_name before: '$file_name
(这也是为什么必须使最后一行的echo 'file_name after: '$file_name'
中的引号不平衡才能使脚本运行)
相反,只需对echo
的整个字符串加双引号,以允许扩展变量file_name
,例如
echo "file_name after: $file_name"
此外,请避免使用反引号代替命令,而应使用$(...)
形式,例如
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
的匹配将仅匹配14
后跟Test_file_
的{{1}}个字符的模式-这可能会成为您想要的东西,但是可能根据.dat
)
虽然??????????????
将提供错误消息,但您可能还想养成验证的习惯,即命令替换通过测试fuser
是否为空后返回变量呼叫file_name
,例如
fuser
仔细检查一下,如果还有其他问题,请告诉我。