函数内部bash字符串比较中的不同行为
我正在编写的shell脚本中有以下部分: (在函数内部bash字符串比较中的不同行为,bash,function,awk,directory,string-comparison,Bash,Function,Awk,Directory,String Comparison,我正在编写的shell脚本中有以下部分: (在someDir中查找最新目录,该目录不是summary/) 在这里,$dirname与字符串summary进行比较,而迭代期间dirname变量的回声将打印为summary/ 当代码写入文件并执行时,此比较部分工作正常 但是,一旦将相同的代码放入函数中并放入我的bashrc中,if检查中的比较似乎不起作用 这与作为目录名的字符串或具有/的字符串有关吗? 当同一个代码在一个函数中时,有什么区别 bashrc内部代码: findLatestDir() {
someDir
中查找最新目录,该目录不是summary/
)
在这里,$dirname
与字符串summary
进行比较,而迭代期间dirname
变量的回声将打印为summary/
当代码写入文件并执行时,此比较部分工作正常
但是,一旦将相同的代码放入函数中并放入我的bashrc中,if
检查中的比较似乎不起作用
这与作为目录名的字符串或具有/
的字符串有关吗?当同一个代码在一个函数中时,有什么区别 bashrc内部代码:
findLatestDir()
{
latestDirName=""
for dirName in `ls -lt /user/someDir/ | head -3 | tail -n +2 | awk '{print $9}'`
do
if [ "$dirName" == "summary" ]; then
continue
fi
latestDirName=$dirName
done
}
脚本的调用方式如下:案例1(文件中的代码):
$。/findLatestDir.sh
案例2(bashrc中的函数):
$findLatestDir
您的.bashrc中可能有ls
的别名或函数定义,这与您在函数中使用ls
的交互很差?如果是这样的话,在函数中显式地说/bin/ls
可以解决问题。您的.bashrc中可能有ls
的别名或函数定义,这与您在函数中使用ls
的交互很差?如果是这样的话,在函数中显式地说/bin/ls
可以解决问题。您的.bashrc中可能有ls
的别名或函数定义,这与您在函数中使用ls
的交互很差?如果是这样的话,在函数中显式地说/bin/ls
可以解决问题。您的.bashrc中可能有ls
的别名或函数定义,这与您在函数中使用ls
的交互很差?如果是这样,在函数中显式地说/bin/ls
可以解决问题。。改为使用stat
:打印历元修改时间,按降序数字排序,然后找到第一个不是“摘要”的目录
请注意,带有尾随目录的bash通配符*/
将结果仅限于目录
我在子shell中执行该函数,因此cd
命令不会影响当前目录。。改为使用stat
:打印历元修改时间,按降序数字排序,然后找到第一个不是“摘要”的目录
请注意,带有尾随目录的bash通配符*/
将结果仅限于目录
我在子shell中执行该函数,因此cd
命令不会影响当前目录。。改为使用stat
:打印历元修改时间,按降序数字排序,然后找到第一个不是“摘要”的目录
请注意,带有尾随目录的bash通配符*/
将结果仅限于目录
我在子shell中执行该函数,因此cd
命令不会影响当前目录。。改为使用stat
:打印历元修改时间,按降序数字排序,然后找到第一个不是“摘要”的目录
请注意,带有尾随目录的bash通配符*/
将结果仅限于目录
我在子shell中执行函数,因此
cd
命令不会影响您当前的目录。continue对我来说毫无意义。请发布代码,演示如何创建和调用函数,并演示您观察到的错误行为。hek2mgl为什么?chepner用完整的细节更新了问题continue
对我来说毫无意义。请发布代码,演示如何创建和调用函数,以及您观察到的错误行为。hek2mgl为什么?chepner用完整的细节更新了问题continue
对我来说毫无意义。请发布代码,演示如何创建和调用函数,以及您观察到的错误行为。hek2mgl为什么?chepner用完整的细节更新了问题continue
对我来说毫无意义。请发布代码,演示如何创建和调用函数,以及您观察到的错误行为。hek2mgl为什么?chepner用完整的细节更新了问题接受此答案因为它直接解决了当前问题接受此答案因为它直接解决了当前问题接受此答案因为它直接解决了当前问题接受此答案因为它直接解决了当前问题
findLatestDir()
{
latestDirName=""
for dirName in `ls -lt /user/someDir/ | head -3 | tail -n +2 | awk '{print $9}'`
do
if [ "$dirName" == "summary" ]; then
continue
fi
latestDirName=$dirName
done
}
findLatestDir() (
cd /some/dir
stat -c $'%Y\t%n' */ |
sort -rn |
cut -f2 | {
while read dir; do
[[ $dir == "summary/" ]] || break
done
echo $dir
}
)