Shell
如何在純 sh 中處理多個數組?
有這台機器只有
sh
可用,cut
沒有--output-delimiter
選項,但我需要使用數組,我嘗試過這種方式,它可以在我的工作機器上執行,但缺乏--output-delimiter
讓我無法走得更遠。在這些約束下,我應該如何繼續保持與我的工作機器相同的結果?
我不能使用
-d '\n'
,因為它不止一個字元,我的排列方法會拋出新行而不是空格。常用工具可能會減少功能(正如編譯busybox的人認為合適的那樣)busybox中不可用的命令將不可用。#!/system/bin/sh count=0 LOG=/data/media/0/Logs/MountBind.log SDID="C10E-14EE" SOURCES="" SOURCES="${SOURCES} /storage/MicroSD/Data";SOURCES="${SOURCES} /mnt/runtime/default/MicroSD/Data";SOURCES="${SOURCES} /mnt/runtime/read/MicroSD/Data";SOURCES="${SOURCES} /mnt/runtime/write/MicroSD/Data"; TARGETS="" TARGETS="${TARGETS} /storage/$SDID/Data";TARGETS="${TARGETS} /mnt/runtime/default/$SDID/Data";TARGETS="${TARGETS} /mnt/runtime/read/$SDID/Data";TARGETS="${TARGETS} /mnt/runtime/write/$SDID/Data"; mountbind() { for SOURCE in $SOURCES; do count=$((count + 1)) echo $SOURCE >>$LOG su --mount-master mount -o bind $SOURCE $(echo $TARGETS | cut -d ' ' -f$count --output-delimiter=\n) 1>>$LOG done } mountbind echo "\n******************************************\nMount output\n******************************************" >> $LOG mount >> $LOG chown 1023:1023 $LOG chmod 770 $LOG
痛苦地。
您可以做的是使用 awk 代替。awk,甚至是 BusyBox awk,都可以做 shell 可以做的大部分事情,只是語法成本更大。它有關聯數組,你想要多少就多少。您可以通過呼叫外部命令
system
。甚至還有重定向和管道功能,儘管它比 shell 更受限制。如果您想要一個不接受任何輸入的 awk 腳本,請將所有程式碼放在一個
BEGIN
塊中。就您而言,如果我理解您想要正確執行的操作,則不需要 awk。您不需要
cut
處理TARGET
字元串:使用參數擴展。BusyBox ash and hush 既是支持${VAR#PREFIX}
也是朋友。只要您的路徑不包含空格,這很容易工作。mountbind() { for SOURCE in $SOURCES; do TARGET=${TARGETS%% *}; TARGETS=${TARGETS#* } su --mount-master mount -o bind "$SOURCE" "$TARGET" 1>>"$LOG" done }