【问题标题】:Bash pass one function variable to other function [duplicate]Bash将一个函数变量传递给另一个函数[重复]
【发布时间】:2017-12-06 23:33:09
【问题描述】:

我有两个函数,第一个调用用法-file 从用户那里获取文件。它有很长的文件名,所以这个函数只是我需要的。 例如: ./test.sh -file some_example_list_data2017.csv 它给了我data2017(这是我想要的)。

function get_file_name() {
    filename=$1
    if [ -f $filename ]
    then 
        echo "${filename}" | awk (make long filename short)
    else 
        echo "${filename} not found"
    fi
}

第二个功能:我想在这里传递上面的$filename,因为它已经有了完整的文件名。我只想在屏幕上显示一些内容。但是这次使用 ./test.sh -display someexample_list_data2017.csv

function parse_above_file() {
    // here I want get_file_name and display the content
    filename=$1
    echo ${filename} | awk/sed/egrep (do something and display)
}

但是第二个函数没有传递文件名。当它运行脚本时,它什么也不打印。

【问题讨论】:

  • 在获得短名称后,您不想在get_file_name 中执行此操作吗:if ... then parse_above_file "$(echo "${filename}" | awk makeshort ... )"
  • 我想传递 get_file_name() 获取后保存的任何文件名变量。并在 parse_above_file() 使用相同的数据($filename 具有)打印/做某事
  • 这可能是您调用函数的方式:parse_above_file "$(get_file_name "$full_filename")" - 您将一个函数 get_file_name 的结果传递给另一个函数 parse_above_file
  • 完成了。终端什么也不做,只是在那里等待。谢谢你
  • 你可能想给我们更多的代码。

标签: bash function shell


【解决方案1】:

有了这段代码,

function get_file_name() {
    filename=$1
    echo "$filename"
    }
function parse_above_file() {
    filename=$1
    echo "$filename"
    filename="bli"
    get_file_name "$filename"
    exit
    }
filename="bla"
get_file_name $filename
filename="ble"
parse_above_file $filename

我得到这个输出:

bla
ble
bli

【讨论】:

  • 我们的降价不是 GitHub 风格的——三引号与单引号没有任何不同。通过选择代码块并单击{} 按钮创建的四空格缩进是格式化多行代码段的正确方法(带有语法高亮、块格式化等)。
  • 顺便说一句,考虑省略 function 关键字——它没有增加任何价值,但破坏了与 POSIX shell 的兼容性。 get_file_name() { 足以构成声明。
  • 另外,locals 应该这样声明(就像在你的函数中使用local filename)。否则,当您在函数中运行 filename=$1 时,您将重新定义全局范围的 filename 变量,而不是定义本地变量。
  • 在调用函数时引用$filename :)
猜你喜欢
  • 1970-01-01
  • 2014-04-02
  • 1970-01-01
  • 2011-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多