当我尝试使用$ @在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答案 0 :(得分:3)
使用test -n 1 2 3
,echo "$@"
将变为echo -n 1 2 3 4
-n
成为echo
的选项,阻止echo
打印NEWLINE char。
您可以这样写:
Test() { printf '%s\n' "$*"; }
(请注意,另一个已删除的答案中提到的Test() { printf -- "$*"; }
可能无效。请尝试Test %d a b c
,然后找出原因。)
答案 1 :(得分:2)
-n
是echo
的特殊选项(删除最终\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”)