有时我需要引用整个命令行以供将来评估.通常我这样做:
printf "%q " "$@"
Run Code Online (Sandbox Code Playgroud)
这很短而且很甜,但输出看起来很糟糕.大多数时候这无关紧要,但有时我想向用户展示.例如,在执行命令的历史菜单中,允许重新执行条目.在这种情况下,我想以更易读的形式引用(更接近用户本身如果他负责引用的话).所以这:
search 'Wordreference (eng->spa)' utter
Run Code Online (Sandbox Code Playgroud)
会比这更好:
search Wordreference\ \(eng-\>spa\) utter
Run Code Online (Sandbox Code Playgroud)
为了获得第一个引用的表单,我可以迭代"$@"并为每个参数执行类似的操作:
[[ $arg == *\ * ]] && arg="'"${arg//\'/\'\\\'\'}"'"
Run Code Online (Sandbox Code Playgroud)
这根本不难,但它涉及循环,条件字符串转换和每次迭代结果的连接.
我想知道是否有更多的"电池包含"命令来开箱即用这种转换.
有很多答案表明 git 1.9 消除了浅克隆的限制。尽管如此,我使用的是 2.6.1 并且仍然存在以下基本问题:
首先,我在某处创建了一个空仓库:
cd /tmp
mkdir target
cd target
git init
Run Code Online (Sandbox Code Playgroud)
然后,我浅克隆一些 repo 并将上述 repo 添加为远程:
cd /tmp
git clone --depth 1 git@github.com:muennich/urxvt-perls.git
cd urxvt-perls
git remote add target /tmp/target
Run Code Online (Sandbox Code Playgroud)
最后,我将这个 repo 推送到远程:
git push target master
Run Code Online (Sandbox Code Playgroud)
但后来我得到:
! [remote rejected] master -> master (shallow update not allowed)
error: failed to push some refs to '/tmp/target'
Run Code Online (Sandbox Code Playgroud)
我在这里缺少什么?