bash指令 - bash中文



在Bash中,如何訪問函數內部的命令行參數? (5)

如果你想有你的參數C風格(參數數組+參數數量),你可以使用$ @和$#。

$#給你的參數個數。 $ @給你所有的參數。 你可以通過args=("[email protected]")把它變成一個數組

舉個例子:

args=("[email protected]")
echo $# arguments passed
echo ${args[0]} ${args[1]} ${args[2]}

注意在這裡${args[0]}實際上是第一個參數,而不是腳本的名字。

https://src-bin.com

我試圖在bash中編寫一個函數來訪問腳本命令行參數,但是它們被替換為函數的位置參數。 如果函數沒有明確的傳入,有沒有辦法訪問命令行參數?

# Demo function
function stuff {
  echo $0 $*
}

# Echo's the name of the script, but no command line arguments
stuff

# Echo's everything I want, but trying to avoid
stuff $*

Answer #1

我閱讀bash ref手冊說這個東西是在BASH_ARGV中捕獲的,雖然它談論了很多“堆棧”。

#!/bin/bash

function argv {
    for a in ${BASH_ARGV[*]} ; do
      echo -n "$a "
    done
    echo
}

function f {
    echo f $1 $2 $3
    echo -n f ; argv
}

function g {
    echo g $1 $2 $3
    echo -n g; argv
    f
}

f boo bar baz
g goo gar gaz

保存在f.sh中

$ ./f.sh arg0 arg1 arg2
f boo bar baz
farg2 arg1 arg0 
g goo gar gaz
garg2 arg1 arg0 
f
farg2 arg1 arg0 

Answer #2
# Save the script arguments
SCRIPT_NAME=$0
ARG_1=$1
ARGS_ALL=$*

function stuff {
  # use script args via the variables you saved
  # or the function args via $
  echo $0 $*
} 


# Call the function with arguments
stuff 1 2 3 4

Answer #3
#!/usr/bin/env bash

echo name of script is $0
echo first argument is $1
echo second argument is $2
echo seventeenth argument is $17
echo number of arguments is $#

編輯:請看我對問題的評論


Answer #4

您可以使用shift關鍵字(運算符?)遍歷它們。 例:

#!/bin/bash
function print()
{
    while [ $# -gt 0 ]
    do
        echo $1;
        shift 1;
    done
}
print $*;




bash