Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.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 - Fatal编程技术网

使bash参数数组保持不变

使bash参数数组保持不变,bash,Bash,我有一个bash脚本 fooA #!/bin/bash script_name=$1; script_params=$( echo $@ | awk '{ $1=""; print $0 }' ); bash /path/to/scripts/$script_name $script_params > /dev/stdout; 以及../scripts/目录中的另一个脚本fooB #!/bin/bash echo 1. $1 echo 2. $2 我的计划很简单: fooA fooB

我有一个bash脚本

fooA

#!/bin/bash
script_name=$1;
script_params=$( echo $@ | awk '{ $1=""; print $0 }' );
bash /path/to/scripts/$script_name $script_params > /dev/stdout;
以及
../scripts/
目录中的另一个脚本fooB

#!/bin/bash

echo 1. $1
echo 2. $2
我的计划很简单:

fooA fooB "some sentence 1" "some sentence 2"
应产生:

  • 一些句子1
  • 一些句子2
  • 使用我当前的脚本,我会

  • 一些
  • 判决
  • 因为从fooA调用fooB时不保留双引号


    请记住,
    ../scripts
    目录中还有许多其他脚本,我如何更改fooA文件中的
    script_params=$(…)
    行以在调用其他脚本时保留变量。

    @jm666的答案在没有其他约束的情况下可以正常工作。不过,为了完整起见,我将给出一个不会弄乱第一个脚本参数列表的版本:

    #!/bin/bash
    name="$1"
    shift
    "/path/to/script/$name" "$@"
    
    #/bin/bash
    script_name="$1"
    script_params=( "${@:2}" )
    bash /path/to/scripts/"$script_name" "${script_params[@]}" > /dev/stdout
    
    或者您可以完全跳过变量:

    #/bin/bash
    bash /path/to/scripts/"$1" "${@:2}" > /dev/stdout
    

    @如果没有额外的限制,jm666的答案将很有效。不过,为了完整起见,我将给出一个不会弄乱第一个脚本参数列表的版本:

    #/bin/bash
    script_name="$1"
    script_params=( "${@:2}" )
    bash /path/to/scripts/"$script_name" "${script_params[@]}" > /dev/stdout
    
    或者您可以完全跳过变量:

    #/bin/bash
    bash /path/to/scripts/"$1" "${@:2}" > /dev/stdout