当使用$ @传递bash中的所有参数时,为什么' -n'不能通过

时间:2018-06-19 08:51:58

标签: bash

当我尝试使用$ @在bash中传递参数时,似乎-n在参数中是第一个,返回符号是' \ n'被删除了。

  public void setFragment(Fragment fragment, int id) {
    changeTitle(id);

    FragmentTransaction fragmentTransaction = 
   getSupportFragmentManager().beginTransaction();
    fragmentTransaction.replace(R.id.main_frame, fragment);
    fragmentTransaction.commit();
}

返回

[...]$ test(){ echo "$@";}
[...]$ test 1 2 3 

但是

[...]$ 1 2 3
[...]$

返回

[...]$ test -n 1 2 3

-n消失,似乎返回符号\ n由于' -n'

而被删除

是' -n' $ @的特殊选项?如何通过$ @

传递-n

2 个答案:

答案 0 :(得分:3)

使用test -n 1 2 3echo "$@"将变为echo -n 1 2 3 4 -n成为echo的选项,阻止echo打印NEWLINE char。

您可以这样写:

Test() { printf '%s\n' "$*"; }

(请注意,另一个已删除的答案中提到的Test() { printf -- "$*"; }可能无效。请尝试Test %d a b c,然后找出原因。)

答案 1 :(得分:2)

-necho的特殊选项(删除最终\n

您需要使用$*代替$@

test(){ echo "$*";}
  • $@扩展为"$1" "$2" "$3" ... "$n"
  • $*扩展为"$1x$2x$3x...$n",其中x是IFS变量的值,即

"$*"是一个长字符串,$IFS充当分隔符或标记分隔符。

echo "$@" ==> echo "-n" "1" "2" "3" ==> 1 2 3(没有“\ n”)

echo "$*" ==> echo "-n 1 2 3" ==> -n 1 2 3(带“\ n”)