首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unix如何将fuser命令输出存储到变量

Unix如何将fuser命令输出存储到变量
EN

Stack Overflow用户
提问于 2018-08-24 02:22:19
回答 1查看 407关注 0票数 0

我是一个脚本新手,我有这样的问题:

我希望使用fuser命令来检查是否存在具有该名称的文件。我希望保存该命令的输出,并在加载之前使用它重命名文件。

我尝试了以下几点:

代码语言:javascript
复制
#!/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'

然而,上述代码的结果是:

代码语言:javascript
复制
-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

然后,在将数据加载到暂存表中之后,再次将文件重命名为我们接收到的旧文件名,然后用其原始名称存档该文件。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-24 04:23:53

你的问题是缺少一个结尾单引号:

代码语言:javascript
复制
echo 'file_name before: '$file_name

(这也是为什么您必须在最后一行的echo 'file_name after: '$file_name'中不平衡引号才能运行脚本)

相反,只需重复引用echo的整个字符串即可扩展变量file_name,例如。

代码语言:javascript
复制
echo "file_name after: $file_name"

此外,避免使用backticks进行命令替换,而使用$(...)表单。

代码语言:javascript
复制
file_name=$(fuser FILE_DIR/SD/Test_file_??????????????.dat)

或者重写可能是:

代码语言:javascript
复制
#!/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是否为空,来验证命令替换是否返回了一个变量。

代码语言:javascript
复制
#!/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

仔细考虑一下,如果你还有其他问题,请告诉我。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51996628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档