Bash

傳遞參數以在孫程序中使用

  • June 19, 2018

我有一個參數列表和三個過程:

bash_script -> child -> grandchild

參數列表是針對孫子的。我可以修改所有三個過程。祖父腳本自己有一個參數。

以下是將剩餘參數傳遞給孫子的正確方法嗎?

#!/usr/bin/env bash
# This is the grandfather    
first_arg="$1"
shift 1;

export MY_ARGS="$@"

我稍後在子程序中“傳播” env 變數,作為呼叫孫子的命令的一部分,例如:

grandchild --foo "$MY_ARGS"  # append $MY_ARGS as arguments to foo

在腳本中,不應將數組降級為字元串。環境變數及其值是一個簡單的key=value對,其中keyvalue都是字元串。將位置參數降級為一個簡單的字元串(通過連接)將難以保持它們之間的分隔,並且當您最終想要使用它們時很難正確引用它們。

相反,將要傳遞給其命令行上的下一個腳本的位置參數(命令行參數)。

#!/bin/bash

first_arg=$1
shift

# later ...

./my_other_script "$@"

在另一個腳本中:

#!/bin/bash

# use "$@" here
foo --bar "$@"

引用自:https://unix.stackexchange.com/questions/450696