Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
函数内部bash字符串比较中的不同行为_Bash_Function_Awk_Directory_String Comparison - Fatal编程技术网

函数内部bash字符串比较中的不同行为

函数内部bash字符串比较中的不同行为,bash,function,awk,directory,string-comparison,Bash,Function,Awk,Directory,String Comparison,我正在编写的shell脚本中有以下部分: (在someDir中查找最新目录,该目录不是summary/) 在这里,$dirname与字符串summary进行比较,而迭代期间dirname变量的回声将打印为summary/ 当代码写入文件并执行时,此比较部分工作正常 但是,一旦将相同的代码放入函数中并放入我的bashrc中,if检查中的比较似乎不起作用 这与作为目录名的字符串或具有/的字符串有关吗? 当同一个代码在一个函数中时,有什么区别 bashrc内部代码: findLatestDir() {

我正在编写的shell脚本中有以下部分:

(在
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
    }
)