&&
他のコマンド(制御演算子、および||
関連;
する他のコマンドを含めることも含まない場合もあります)を入力として使用し、そのコマンドを「サブコマンド」に分割するコマンドはありますか?
たとえば、
echo 1 && ls --invalid-option 2>/dev/null || echo 3
次のように分類されます。
echo 1
ls --invalid-option 2>/dev/null
または多分ls --invalid-option
echo 3
答え1
構文解析シェルの構文は次のとおりです。巨大な仕事が簡単に終わらないことが多いです。
ただし、その行を一度実行したい場合は、次のようにシェルで実行することができますset -x
。
wsl@win10:~ $ set -x
wsl@win10:~ $ echo 1 && ls haha &> /dev/null; pwd
+ echo 1
1
+ ls --color=auto haha
+ pwd
/home/wsl
wsl@win10:~ $
ご存知のように、拡張alias
機能(実際にはすべての拡張機能)という注意事項があります。
読者が実際のコマンド(ヒント:プラス記号とスペースで始まる行)を抽出することは、放課後の面白い小さな作業になる可能性があります。
答え2
非常に基本的で制限された方法でsedを使用してください。
# Utility functions: print-as-echo, print-line-with-visual-space.
pe() { for _i;do printf "%s" "$_i";done; printf "\n"; }
pl() { pe;pe "-----" ;pe "$*"; }
pl " Input data file $FILE:"
head $FILE
pl " Input data file $FILE, invisibles marked:"
cat -A $FILE
pl " Results:"
sed -e 's/[ ]*&&[ ]*/\n/g' -e 's/[ ]*||[ ]*/\n/g' $FILE
生産:
-----
Input data file data2:
one-space && next-one || last-one
one-TAB && next-tab || last-tab
mixed-tabs-space && next-mixed || last-mixed
-----
Input data file data2, invisibles marked:
one-space && next-one || last-one$
$
one-TAB^I&&^Inext-tab^I||^Ilast-tab$
$
mixed-tabs-space ^I && ^I^Inext-mixed^I || ^Ilast-mixed$
-----
Results:
one-space
next-one
last-one
one-TAB
next-tab
last-tab
mixed-tabs-space
next-mixed
last-mixed
そのようなシステムでは:
OS, ker|rel, machine: Linux, 3.16.0-7-amd64, x86_64
Distribution : Debian 8.11 (jessie)
sed (GNU sed) 4.2.2
[ ] にはタブとスペースが含まれているため、これらのスペース文字はいくらでも許可されます。引用符付き文字列などは考慮しません。
頑張って...乾杯、drl